The Professional Programmer

Dave Cross
Dave CrossOwner / Senior Developer at Magnum Solutions Ltd
The Professional
Programmer
Some tips
What We Will Cover
● Know your tools
● Adjacent technologies
● Software Engineering and Architecture
● The Business
● Personal Development
Fluffiness vs Time
In Three Hours
● Lots to cover
● Moving pretty quickly
● High-level view
● Pointers to information
● Homework
Administrivia
● Let's keep this informal
● Dialogue > Monologue
● Share experiences
● Ask questions
Who Are You?
Who Are You?
● Hi, I'm Dave
● I'm very old
● I've been doing this for thirty years
● Freelance since 1995
Very Very Old
● When I was a school we did no computing
● First year of a physics degree
● No computing there either
● Dropped out
Very Very Old
● Sinclair Spectrum
● "I can do this"
● South Bank Polytechnic
● Computer Studies (1984-88)
● "Data Processing"
Course Syllabus
● VAX / VMS
● COBOL
● Assembler
● Prolog
● CODASYL Databases
● 5th Generation Computing
Useful Stuff
● C
● Unix
● SQL
● SGML
First Job
● C
● SQL
● Windows
● CASE Tool
● SSADM
Second Job
● C++
○ OO Programmng
● Network communication
Third Job (Disney)
● C
● Unix
● SQL
○ Sybase
● Ka-Ching!
Freelancing
● C / Unix / Sybase
● Perl
● City -> Dotcoms
● "New Media"
● BBC / Guardian
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
SGML?
● Standardised Generalised Markup Language
● Basis for XML
● Basis for HTML
● Funny how stuff comes around
Know Your Tools
Know Your Tools
● Three tools you use every day
● Editor
● Operating system
● Source code control
Editor
● A programmer's most important tool
● Get to know it well
● Pick one you like
● Not just vi vs emacs
● Lots of alternatives
● I like Atom
Programmer's Editor
● Use a real programmer's editor
● Get to know the features
● Take time to become an expert
● You will save time in the end
Editor Features
● Syntax highlighting
● Auto-complete
● Indentation
● Folding
IDE Features
● Deeper knowledge of languages
● Compile / run
● Debugging
● Source code control
● Multi-file projects
More Features
● Everything is configurable
● Everything is extensible
● Everything is programmable
Operating System
● Your operating system is where you live
● Get to know its features
● Design your working environment
● Automate things
Operating Systems
● What do you use your operating system for?
● Web browsing
● Reading email
● Social media
● Development?
○ Virtual machines
○ Containers
Configure Your OS
● Make it as comfortable as possible
● Window decoration
● Window behaviour
● Virtual desktops
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
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
Source Code Control
● Why aren't you using git?
● Why aren't you using Github?
○ Microsoft
● Understand how your source code control works
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
Git Advantages
● Distributed model
○ Off-line access
● Branches are easy and quick
● Rebasing
○ Interactive rebasing
● "Fetch" vs "Pull"
● Safety net
Git in the Cloud
● Don't run your own Git infrastructure
● Other people are better than you at doing that
● Social coding
● Github
● Bitbucket
Adjacent
Technologies
Adjacent Technologies
● What other technologies do you use every day?
● Data storage
○ Databases
○ Data formats
○ XML
○ Caching
● Networking
○ HTTP
Adjacent Technologies
● Testing
○ Types of tests
○ Test automation
● Deployment
○ Jenkins
○ Docker
○ AWS
Data Storage
● How do you store your persistent data?
● Database
○ RDBMS
○ NoSQL
● Data files
○ JSON
○ YAML
○ XML
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?
RDBMS Features
● Which RDBMS features do you use?
● How vendor specific are they?
● Vendor-specific SQL extensions
● Referential integrity
● Stored procedures?
● Triggers?
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?
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?
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?
Data Files
● What formats are your data files?
● How are they processed?
● Are you using the best available tools to process them?
JSON
● Javascript Object Notation
● Popular data interchange format
● AJAX
● Decode to native data structures
● Encode from native data structures
JQ
● General purpose JSON utility
● Reformat JSON
● Extract data from JSON
● Powerful query language
XML
● Still popular
● For some reason
● Need to deal with it
● Find the right tools
XPath
● XML query language
● Extract data from XML documents
● Standard syntax
Networking
● What networking protocols do you use?
● How well do you know them?
● Seven layer model
HTTP
● Can you explain the HTTP request / response cycle?
● To what level of detail?
● What difference does HTTPS / SSL make?
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
Testing
● Do you write unit tests?
● Does your system have automated integration tests?
● How are your tests run?
● Automatically?
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
What is Unit Testing?
● Code that exercises an individual element (unit) of your code
● Provide known inputs
● Look for expected outputs
● “Bottom-up” testing
Test Driven Development
● Have you tried Test Driven Development?
● What did you like?
● What didn't you like?
● Will you try it again?
TDD Advantages
● Tests are a specification of your program
● If the tests pass, the program is finished
● Know when to finish
Behaviour Driven Development
● Let end users define tests in their language
● Simple domain-specific language
● Framework converts user tests to running code
● Cucumber
Test Automation
● What test automation frameworks do you know?
● What test automation frameworks do you use?
● Selenium
Test Coverage
● How good are your tests?
● How much of your code is used in your tests?
● Measure to improve
Deployment
● How is your system deployed?
● Where are the servers located?
● Do you care?
Deployment Environments
● What environments do you have?
● Development
● Integration
● Staging
● Production
Deployment Environments
● How is code moved from environment to environment?
● How similar are those environments?
● How are they kept in step?
Database Environments
● How are databases handled in development and testing environments?
● Full database?
● Smaller data sets?
● Anonymised data?
Deployment Options
● Real hardware
● Cloud servers
● Virtual machines
● Containers
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
Cloud Servers
● Servers commissioned from a huge farm
● Commissioned / decommissioned from a dashboard
● Or with an API
● Never see the actual hardware
● Easily scalable
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
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
Cattle Not Pets
● Treat servers as cattle, not pets
● Make it easy to create new ones
● Do that a lot
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
Jenkins
● Continuous integration
● Run tests on every commit
● Continuous deployment
● Make release available on every commit
● Quality gates
● Other, similar, products are available
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
Amazon Web Services
Other Cloud Providers
● Google Cloud Platform
● Microsoft Azure
● Oracle Cloud
● Rack Space
● Open Stack (self hosted)
● Etc...
Software
Engineering &
Architecture
Software Engineering & Architecture
● Software development lifecycle
● Programming paradigms
● Design patterns
Software Development Lifecycle
● Agile vs Waterfall
● Agile Manifesto
● Scrum vs Kanban vs Extreme Programming
● Know your tools
○ Jira
○ Code reviews
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.
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
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
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
Responding to Change
● Requirements will change during the project lifetime
● Be flexible
● Plan for change
Programming Paradigms
● What paradigms does your system use?
● Procedural
● Object Oriented
● Functional
● Who made those choices?
● Why?
Procedural Programming
● Dumb variables
● Procedures, functions
● Hard to maintain
● Hard to scale
Object Oriented Programming
● Classes define both data (attributes) and behaviour (methods)
● Intelligent variables
● Encapsulation
● Subclassing
● Easy to maintain
● Easy to scale
Functional Programming
● Pure functions
○ Take inputs, return values
○ No global variables
● Immutable variables
● Prefer recursion to loops
● Easier to maintain
● Good for asynchronous programming
Design Patterns
● "Gang of Four" book
● "Monolithic" architecture
● Service Oriented Architecture
● Microservices
The Power of Names
● Design patterns weren't new or exciting
● Naming them was
● Catalogue of known techniques
● Easier to discuss
● Easier to share
The Business
The Business
● What does your company do?
● What does success look like?
● How do they measure success?
● How do you contribute to that success?
What Does Your Company Do?
● What service does your company provide?
● Why do customers choose your company?
● What is the USP?
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?
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?
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?
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?
Personal
Development
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?
Career Structure
● What is the hierarchy like?
● Where are you currently?
● Where do you want to be?
● How do you get there?
● Annual reviews
Management vs Technical
● Do you want to manage people?
● Team leader
● Development manager
● Help others build a career
● Less time coding
● More politics
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
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
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
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
External Marketing
● How well-know are you outside of your company?
● Write a blog
● Answer questions on forums
● Speak about your work
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
Blogging Practicalities
● Wordpress
○ Hosted (wordpress.com)
○ Self-hosted (wordpress.org)
● Medium
○ Publications
● Github Pages
● Custom domain
Public Speaking
● Give talks about your projects
● Public speaking isn't as hard as you might think
● Start with a lightning talk
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
TED
● Excellent examples of talks
● Interesting subject matter
● Engaging speakers
● Well-designed slides
● Something to aim at
Public Speaking Practicalities
● Find somewhere to speak
● Meet-up groups
● Local user groups
● Conferences
Conclusions
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
The Professional
Programmer
Dave Cross
@davorg
dave@perlhacks.com
1 of 112

Recommended

Reusability is the goal by
Reusability is the goalReusability is the goal
Reusability is the goalRed Pill Now
366 views51 slides
Writing clean scientific software Murphy cleancoding by
Writing clean scientific software Murphy cleancodingWriting clean scientific software Murphy cleancoding
Writing clean scientific software Murphy cleancodingsaber tabatabaee
53 views37 slides
Microservices - the lean way by
Microservices - the lean wayMicroservices - the lean way
Microservices - the lean wayBruno Bossola
1.3K views52 slides
javerosmx-2015-marzo-groovy-java8-comparison by
javerosmx-2015-marzo-groovy-java8-comparisonjaverosmx-2015-marzo-groovy-java8-comparison
javerosmx-2015-marzo-groovy-java8-comparisonDomingo Suarez Torres
1.3K views52 slides
Go at Skroutz by
Go at SkroutzGo at Skroutz
Go at SkroutzAgisAnastasopoulos
564 views44 slides
Php : Why and When! by
Php : Why and When!Php : Why and When!
Php : Why and When!Nishant Shrivastava
344 views14 slides

More Related Content

What's hot

TDD done right - tests immutable to refactor by
TDD done right - tests immutable to refactorTDD done right - tests immutable to refactor
TDD done right - tests immutable to refactorGrzegorz Miejski
397 views47 slides
Monorepo at Pinterest by
Monorepo at PinterestMonorepo at Pinterest
Monorepo at PinterestSuman Karumuri
819 views20 slides
Microservices, the lean way by
Microservices, the lean wayMicroservices, the lean way
Microservices, the lean wayBruno Bossola
748 views50 slides
Keeping up with the changes: Automating UAT - Damian Sweeney, Student and Aca... by
Keeping up with the changes: Automating UAT - Damian Sweeney, Student and Aca...Keeping up with the changes: Automating UAT - Damian Sweeney, Student and Aca...
Keeping up with the changes: Automating UAT - Damian Sweeney, Student and Aca...Blackboard APAC
416 views32 slides
I believe in rust by
I believe in rustI believe in rust
I believe in rustReidar Sollid
2.3K views20 slides
Rails data migrations by
Rails data migrationsRails data migrations
Rails data migrationsАндрей Колешко
300 views38 slides

What's hot(20)

TDD done right - tests immutable to refactor by Grzegorz Miejski
TDD done right - tests immutable to refactorTDD done right - tests immutable to refactor
TDD done right - tests immutable to refactor
Grzegorz Miejski397 views
Microservices, the lean way by Bruno Bossola
Microservices, the lean wayMicroservices, the lean way
Microservices, the lean way
Bruno Bossola748 views
Keeping up with the changes: Automating UAT - Damian Sweeney, Student and Aca... by Blackboard APAC
Keeping up with the changes: Automating UAT - Damian Sweeney, Student and Aca...Keeping up with the changes: Automating UAT - Damian Sweeney, Student and Aca...
Keeping up with the changes: Automating UAT - Damian Sweeney, Student and Aca...
Blackboard APAC416 views
Why we love Clojure? GeekOut 2018 presentation by Solita Oy
Why we love Clojure? GeekOut 2018 presentationWhy we love Clojure? GeekOut 2018 presentation
Why we love Clojure? GeekOut 2018 presentation
Solita Oy1.9K views
Understanding how concurrency work in os by GenchiLu1
Understanding how concurrency work in osUnderstanding how concurrency work in os
Understanding how concurrency work in os
GenchiLu1755 views
Custom angular libraries by MattVaughn9
Custom angular librariesCustom angular libraries
Custom angular libraries
MattVaughn961 views
SUTOL 2015 - Utilizing the OpenNTF Domino API by Oliver Busse
SUTOL 2015 - Utilizing the OpenNTF Domino APISUTOL 2015 - Utilizing the OpenNTF Domino API
SUTOL 2015 - Utilizing the OpenNTF Domino API
Oliver Busse1.1K views
Ruby, the language of devops by Rob Kinyon
Ruby, the language of devopsRuby, the language of devops
Ruby, the language of devops
Rob Kinyon4.3K views
JHipster Beyond CRUD - JHipster Conf' 2019 by Intesys
JHipster Beyond CRUD - JHipster Conf' 2019JHipster Beyond CRUD - JHipster Conf' 2019
JHipster Beyond CRUD - JHipster Conf' 2019
Intesys1.3K views
Bootify Yyour App from Zero to Hero by EPAM
Bootify Yyour App from Zero to HeroBootify Yyour App from Zero to Hero
Bootify Yyour App from Zero to Hero
EPAM435 views
Atomic Developer Bundle by Dharmit Shah
Atomic Developer BundleAtomic Developer Bundle
Atomic Developer Bundle
Dharmit Shah220 views

Similar to The Professional Programmer

kranonit S06E01 Игорь Цинько: High load by
kranonit S06E01 Игорь Цинько: High loadkranonit S06E01 Игорь Цинько: High load
kranonit S06E01 Игорь Цинько: High loadKrivoy Rog IT Community
385 views45 slides
Why docker is taking over the world (docker birthday 2019) by
Why docker is taking over the world (docker birthday 2019)Why docker is taking over the world (docker birthday 2019)
Why docker is taking over the world (docker birthday 2019)JEMLI Fathi
137 views23 slides
Expedia 3x3 presentation by
Expedia 3x3 presentationExpedia 3x3 presentation
Expedia 3x3 presentationDrew Hannay
445 views53 slides
Sean schofield & Richard Lister, Spree Commerce_ Fearless deployment @ Open C... by
Sean schofield & Richard Lister, Spree Commerce_ Fearless deployment @ Open C...Sean schofield & Richard Lister, Spree Commerce_ Fearless deployment @ Open C...
Sean schofield & Richard Lister, Spree Commerce_ Fearless deployment @ Open C...Spark Solutions
18.2K views36 slides
Docker. Does it matter for Java developer ? by
Docker. Does it matter for Java developer ?Docker. Does it matter for Java developer ?
Docker. Does it matter for Java developer ?Izzet Mustafaiev
11.4K views41 slides
Monitoring and automation by
Monitoring and automationMonitoring and automation
Monitoring and automationRicardo Bánffy
44 views17 slides

Similar to The Professional Programmer(20)

Why docker is taking over the world (docker birthday 2019) by JEMLI Fathi
Why docker is taking over the world (docker birthday 2019)Why docker is taking over the world (docker birthday 2019)
Why docker is taking over the world (docker birthday 2019)
JEMLI Fathi137 views
Expedia 3x3 presentation by Drew Hannay
Expedia 3x3 presentationExpedia 3x3 presentation
Expedia 3x3 presentation
Drew Hannay445 views
Sean schofield & Richard Lister, Spree Commerce_ Fearless deployment @ Open C... by Spark Solutions
Sean schofield & Richard Lister, Spree Commerce_ Fearless deployment @ Open C...Sean schofield & Richard Lister, Spree Commerce_ Fearless deployment @ Open C...
Sean schofield & Richard Lister, Spree Commerce_ Fearless deployment @ Open C...
Spark Solutions18.2K views
Docker. Does it matter for Java developer ? by Izzet Mustafaiev
Docker. Does it matter for Java developer ?Docker. Does it matter for Java developer ?
Docker. Does it matter for Java developer ?
Izzet Mustafaiev11.4K views
µServices Architecture @ EPAM WOW 2015 by Izzet Mustafaiev
µServices Architecture @ EPAM WOW 2015µServices Architecture @ EPAM WOW 2015
µServices Architecture @ EPAM WOW 2015
Izzet Mustafaiev1.3K views
Truemotion Adventures in Containerization by Ryan Hunter
Truemotion Adventures in ContainerizationTruemotion Adventures in Containerization
Truemotion Adventures in Containerization
Ryan Hunter200 views
Path dependent-development (PyCon India) by ncoghlan_dev
Path dependent-development (PyCon India)Path dependent-development (PyCon India)
Path dependent-development (PyCon India)
ncoghlan_dev424 views
Path Dependent Development (PyCon AU) by ncoghlan_dev
Path Dependent Development (PyCon AU)Path Dependent Development (PyCon AU)
Path Dependent Development (PyCon AU)
ncoghlan_dev959 views
Test all the things! Automated testing with Drupal 8 by Sam Becker
Test all the things! Automated testing with Drupal 8Test all the things! Automated testing with Drupal 8
Test all the things! Automated testing with Drupal 8
Sam Becker1.4K views
Introduction to Test Automation by Pekka Klärck
Introduction to Test AutomationIntroduction to Test Automation
Introduction to Test Automation
Pekka Klärck44.4K views
Instant developer onboarding with self contained repositories by Yshay Yaacobi
Instant developer onboarding with self contained repositoriesInstant developer onboarding with self contained repositories
Instant developer onboarding with self contained repositories
Yshay Yaacobi157 views
Liferay portals in real projects by IBACZ
Liferay portals  in real projectsLiferay portals  in real projects
Liferay portals in real projects
IBACZ5.8K views
NetflixOSS Meetup S6E1 - Titus & Containers by aspyker
NetflixOSS Meetup S6E1 - Titus & ContainersNetflixOSS Meetup S6E1 - Titus & Containers
NetflixOSS Meetup S6E1 - Titus & Containers
aspyker2.4K views
Viktor Turskyi "Effective NodeJS Application Development" by Fwdays
Viktor Turskyi "Effective NodeJS Application Development"Viktor Turskyi "Effective NodeJS Application Development"
Viktor Turskyi "Effective NodeJS Application Development"
Fwdays521 views
Laptop Devops: Putting Modern Infrastructure Automation to Work For Local Dev... by Thoughtworks
Laptop Devops: Putting Modern Infrastructure Automation to Work For Local Dev...Laptop Devops: Putting Modern Infrastructure Automation to Work For Local Dev...
Laptop Devops: Putting Modern Infrastructure Automation to Work For Local Dev...
Thoughtworks475 views
Instant LAMP Stack with Vagrant and Puppet by Patrick Lee
Instant LAMP Stack with Vagrant and PuppetInstant LAMP Stack with Vagrant and Puppet
Instant LAMP Stack with Vagrant and Puppet
Patrick Lee5.6K views

More from Dave Cross

Measuring the Quality of Your Perl Code by
Measuring the Quality of Your Perl CodeMeasuring the Quality of Your Perl Code
Measuring the Quality of Your Perl CodeDave Cross
872 views103 slides
Apollo 11 at 50 - A Simple Twitter Bot by
Apollo 11 at 50 - A Simple Twitter BotApollo 11 at 50 - A Simple Twitter Bot
Apollo 11 at 50 - A Simple Twitter BotDave Cross
594 views47 slides
Monoliths, Balls of Mud and Silver Bullets by
Monoliths, Balls of Mud and Silver BulletsMonoliths, Balls of Mud and Silver Bullets
Monoliths, Balls of Mud and Silver BulletsDave Cross
583 views74 slides
I'm A Republic (Honest!) by
I'm A Republic (Honest!)I'm A Republic (Honest!)
I'm A Republic (Honest!)Dave Cross
650 views101 slides
Web Site Tune-Up - Improve Your Googlejuice by
Web Site Tune-Up - Improve Your GooglejuiceWeb Site Tune-Up - Improve Your Googlejuice
Web Site Tune-Up - Improve Your GooglejuiceDave Cross
1.1K views113 slides
Modern Perl Web Development with Dancer by
Modern Perl Web Development with DancerModern Perl Web Development with Dancer
Modern Perl Web Development with DancerDave Cross
2.5K views137 slides

More from Dave Cross(20)

Measuring the Quality of Your Perl Code by Dave Cross
Measuring the Quality of Your Perl CodeMeasuring the Quality of Your Perl Code
Measuring the Quality of Your Perl Code
Dave Cross872 views
Apollo 11 at 50 - A Simple Twitter Bot by Dave Cross
Apollo 11 at 50 - A Simple Twitter BotApollo 11 at 50 - A Simple Twitter Bot
Apollo 11 at 50 - A Simple Twitter Bot
Dave Cross594 views
Monoliths, Balls of Mud and Silver Bullets by Dave Cross
Monoliths, Balls of Mud and Silver BulletsMonoliths, Balls of Mud and Silver Bullets
Monoliths, Balls of Mud and Silver Bullets
Dave Cross583 views
I'm A Republic (Honest!) by Dave Cross
I'm A Republic (Honest!)I'm A Republic (Honest!)
I'm A Republic (Honest!)
Dave Cross650 views
Web Site Tune-Up - Improve Your Googlejuice by Dave Cross
Web Site Tune-Up - Improve Your GooglejuiceWeb Site Tune-Up - Improve Your Googlejuice
Web Site Tune-Up - Improve Your Googlejuice
Dave Cross1.1K views
Modern Perl Web Development with Dancer by Dave Cross
Modern Perl Web Development with DancerModern Perl Web Development with Dancer
Modern Perl Web Development with Dancer
Dave Cross2.5K views
Freeing Tower Bridge by Dave Cross
Freeing Tower BridgeFreeing Tower Bridge
Freeing Tower Bridge
Dave Cross685 views
Modern Perl Catch-Up by Dave Cross
Modern Perl Catch-UpModern Perl Catch-Up
Modern Perl Catch-Up
Dave Cross2.3K views
Error(s) Free Programming by Dave Cross
Error(s) Free ProgrammingError(s) Free Programming
Error(s) Free Programming
Dave Cross4.4K views
Medium Perl by Dave Cross
Medium PerlMedium Perl
Medium Perl
Dave Cross4.7K views
Modern Web Development with Perl by Dave Cross
Modern Web Development with PerlModern Web Development with Perl
Modern Web Development with Perl
Dave Cross15.8K views
Improving Dev Assistant by Dave Cross
Improving Dev AssistantImproving Dev Assistant
Improving Dev Assistant
Dave Cross10K views
Conference Driven Publishing by Dave Cross
Conference Driven PublishingConference Driven Publishing
Conference Driven Publishing
Dave Cross10.1K views
Conference Driven Publishing by Dave Cross
Conference Driven PublishingConference Driven Publishing
Conference Driven Publishing
Dave Cross3.2K views
TwittElection by Dave Cross
TwittElectionTwittElection
TwittElection
Dave Cross4.5K views
Perl in the Internet of Things by Dave Cross
Perl in the Internet of ThingsPerl in the Internet of Things
Perl in the Internet of Things
Dave Cross4.6K views
Return to the Kingdom of the Blind by Dave Cross
Return to the Kingdom of the BlindReturn to the Kingdom of the Blind
Return to the Kingdom of the Blind
Dave Cross8.8K views
Github, Travis-CI and Perl by Dave Cross
Github, Travis-CI and PerlGithub, Travis-CI and Perl
Github, Travis-CI and Perl
Dave Cross9.9K views
Object-Oriented Programming with Perl and Moose by Dave Cross
Object-Oriented Programming with Perl and MooseObject-Oriented Programming with Perl and Moose
Object-Oriented Programming with Perl and Moose
Dave Cross10.6K views
Database Programming with Perl and DBIx::Class by Dave Cross
Database Programming with Perl and DBIx::ClassDatabase Programming with Perl and DBIx::Class
Database Programming with Perl and DBIx::Class
Dave Cross14.7K views

Recently uploaded

The Professional.pptx by
The Professional.pptxThe Professional.pptx
The Professional.pptxPramod Kumar Srivastava
39 views176 slides
Sightless opening analysis by
Sightless opening analysisSightless opening analysis
Sightless opening analysisImanFatima155952
10 views6 slides
Detailed CV Dr GG Saxena IAS Rtd 091123.docx by
Detailed CV Dr GG Saxena IAS Rtd 091123.docxDetailed CV Dr GG Saxena IAS Rtd 091123.docx
Detailed CV Dr GG Saxena IAS Rtd 091123.docxAmbuj Saxena
25 views16 slides
IIBA Melbourne - Pave your Path to Success by
IIBA Melbourne - Pave your Path to Success IIBA Melbourne - Pave your Path to Success
IIBA Melbourne - Pave your Path to Success AustraliaChapterIIBA
33 views10 slides
Resume_McCauleyFynnBullock-1 (1).pdf by
Resume_McCauleyFynnBullock-1 (1).pdfResume_McCauleyFynnBullock-1 (1).pdf
Resume_McCauleyFynnBullock-1 (1).pdfFynnBullock
13 views2 slides
PROGRAMME.pdf by
PROGRAMME.pdfPROGRAMME.pdf
PROGRAMME.pdfHiNedHaJar
21 views13 slides

Recently uploaded(20)

Detailed CV Dr GG Saxena IAS Rtd 091123.docx by Ambuj Saxena
Detailed CV Dr GG Saxena IAS Rtd 091123.docxDetailed CV Dr GG Saxena IAS Rtd 091123.docx
Detailed CV Dr GG Saxena IAS Rtd 091123.docx
Ambuj Saxena25 views
Resume_McCauleyFynnBullock-1 (1).pdf by FynnBullock
Resume_McCauleyFynnBullock-1 (1).pdfResume_McCauleyFynnBullock-1 (1).pdf
Resume_McCauleyFynnBullock-1 (1).pdf
FynnBullock13 views
Software Engineer's Career Management Toolkit by ozgengungor1
Software Engineer's Career Management ToolkitSoftware Engineer's Career Management Toolkit
Software Engineer's Career Management Toolkit
ozgengungor114 views
sample-resumes.docx by KimQadasha
sample-resumes.docxsample-resumes.docx
sample-resumes.docx
KimQadasha5 views
21. Certificate of Appreciation Alex by Manu Mitra
21. Certificate of Appreciation Alex21. Certificate of Appreciation Alex
21. Certificate of Appreciation Alex
Manu Mitra7 views
canada immigration plan 2024 to 2026.docx by AmitSingh3521
canada immigration plan 2024 to 2026.docxcanada immigration plan 2024 to 2026.docx
canada immigration plan 2024 to 2026.docx
AmitSingh35217 views
Scrum Quiz Certification by Vivek Nair
Scrum Quiz CertificationScrum Quiz Certification
Scrum Quiz Certification
Vivek Nair5 views
Readiness Quiz - Sr. Engineer.pptx by guptanavneet1
Readiness Quiz - Sr. Engineer.pptxReadiness Quiz - Sr. Engineer.pptx
Readiness Quiz - Sr. Engineer.pptx
guptanavneet1432 views
SUDIP DHAR Resume.pdf by Sudip Dhar
SUDIP DHAR  Resume.pdfSUDIP DHAR  Resume.pdf
SUDIP DHAR Resume.pdf
Sudip Dhar13 views
Danny Gaethofs CV - n English.pdf by Danny Gaethofs
Danny Gaethofs  CV - n English.pdfDanny Gaethofs  CV - n English.pdf
Danny Gaethofs CV - n English.pdf
Danny Gaethofs13 views
WordCamp (Why fret over AI overlords when you can befriend them).pdf by BiaAhmed1
WordCamp (Why fret over AI overlords when you can befriend them).pdfWordCamp (Why fret over AI overlords when you can befriend them).pdf
WordCamp (Why fret over AI overlords when you can befriend them).pdf
BiaAhmed125 views
Readiness Quiz - Staff Engineer.pptx by guptanavneet1
Readiness Quiz - Staff Engineer.pptxReadiness Quiz - Staff Engineer.pptx
Readiness Quiz - Staff Engineer.pptx
guptanavneet1606 views

The Professional Programmer

  • 2. What We Will Cover ● Know your tools ● Adjacent technologies ● Software Engineering and Architecture ● The Business ● Personal Development
  • 4. In Three Hours ● Lots to cover ● Moving pretty quickly ● High-level view ● Pointers to information ● Homework
  • 5. Administrivia ● Let's keep this informal ● Dialogue > Monologue ● Share experiences ● Ask questions
  • 7. Who Are You? ● Hi, I'm Dave ● I'm very old ● I've been doing this for thirty years ● Freelance since 1995
  • 8. Very Very Old ● When I was a school we did no computing ● First year of a physics degree ● No computing there either ● Dropped out
  • 9. Very Very Old ● Sinclair Spectrum ● "I can do this" ● South Bank Polytechnic ● Computer Studies (1984-88) ● "Data Processing"
  • 10. Course Syllabus ● VAX / VMS ● COBOL ● Assembler ● Prolog ● CODASYL Databases ● 5th Generation Computing
  • 11. Useful Stuff ● C ● Unix ● SQL ● SGML
  • 12. First Job ● C ● SQL ● Windows ● CASE Tool ● SSADM
  • 13. Second Job ● C++ ○ OO Programmng ● Network communication
  • 14. Third Job (Disney) ● C ● Unix ● SQL ○ Sybase ● Ka-Ching!
  • 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
  • 17. SGML? ● Standardised Generalised Markup Language ● Basis for XML ● Basis for HTML ● Funny how stuff comes around
  • 19. Know Your Tools ● Three tools you use every day ● Editor ● Operating system ● Source code control
  • 20. Editor ● A programmer's most important tool ● Get to know it well ● Pick one you like ● Not just vi vs emacs ● Lots of alternatives ● I like Atom
  • 21. Programmer's Editor ● Use a real programmer's editor ● Get to know the features ● Take time to become an expert ● You will save time in the end
  • 22. Editor Features ● Syntax highlighting ● Auto-complete ● Indentation ● Folding
  • 23. IDE Features ● Deeper knowledge of languages ● Compile / run ● Debugging ● Source code control ● Multi-file projects
  • 24. More Features ● Everything is configurable ● Everything is extensible ● Everything is programmable
  • 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
  • 36. Adjacent Technologies ● Testing ○ Types of tests ○ Test automation ● Deployment ○ Jenkins ○ Docker ○ AWS
  • 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
  • 46. XML ● Still popular ● For some reason ● Need to deal with it ● Find the right tools
  • 47. XPath ● XML query language ● Extract data from XML documents ● Standard syntax
  • 48. Networking ● What networking protocols do you use? ● How well do you know them? ● Seven layer model
  • 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?
  • 60. Deployment Environments ● What environments do you have? ● Development ● Integration ● Staging ● Production
  • 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?
  • 63. Deployment Options ● Real hardware ● Cloud servers ● Virtual machines ● Containers
  • 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
  • 73. Other Cloud Providers ● Google Cloud Platform ● Microsoft Azure ● Oracle Cloud ● Rack Space ● Open Stack (self hosted) ● Etc...
  • 75. Software Engineering & Architecture ● Software development lifecycle ● Programming paradigms ● Design patterns
  • 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?
  • 83. Procedural Programming ● Dumb variables ● Procedures, functions ● Hard to maintain ● Hard to scale
  • 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
  • 105. Blogging Practicalities ● Wordpress ○ Hosted (wordpress.com) ○ Self-hosted (wordpress.org) ● Medium ○ Publications ● Github Pages ● Custom domain
  • 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
  • 109. Public Speaking Practicalities ● Find somewhere to speak ● Meet-up groups ● Local user groups ● Conferences
  • 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