Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

The Professional Programmer

347 vues

Publié le

The slides from a half-day workshop on career development for programmers that I ran at The Perl Conference in Glasgow

Publié dans : Carrière
  • Identifiez-vous pour voir les commentaires

The Professional Programmer

  1. 1. The Professional Programmer Some tips
  2. 2. What We Will Cover ● Know your tools ● Adjacent technologies ● Software Engineering and Architecture ● The Business ● Personal Development
  3. 3. Fluffiness vs Time
  4. 4. In Three Hours ● Lots to cover ● Moving pretty quickly ● High-level view ● Pointers to information ● Homework
  5. 5. Administrivia ● Let's keep this informal ● Dialogue > Monologue ● Share experiences ● Ask questions
  6. 6. Who Are You?
  7. 7. Who Are You? ● Hi, I'm Dave ● I'm very old ● I've been doing this for thirty years ● Freelance since 1995
  8. 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. 9. Very Very Old ● Sinclair Spectrum ● "I can do this" ● South Bank Polytechnic ● Computer Studies (1984-88) ● "Data Processing"
  10. 10. Course Syllabus ● VAX / VMS ● COBOL ● Assembler ● Prolog ● CODASYL Databases ● 5th Generation Computing
  11. 11. Useful Stuff ● C ● Unix ● SQL ● SGML
  12. 12. First Job ● C ● SQL ● Windows ● CASE Tool ● SSADM
  13. 13. Second Job ● C++ ○ OO Programmng ● Network communication
  14. 14. Third Job (Disney) ● C ● Unix ● SQL ○ Sybase ● Ka-Ching!
  15. 15. Freelancing ● C / Unix / Sybase ● Perl ● City -> Dotcoms ● "New Media" ● BBC / Guardian
  16. 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. 17. SGML? ● Standardised Generalised Markup Language ● Basis for XML ● Basis for HTML ● Funny how stuff comes around
  18. 18. Know Your Tools
  19. 19. Know Your Tools ● Three tools you use every day ● Editor ● Operating system ● Source code control
  20. 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. 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. 22. Editor Features ● Syntax highlighting ● Auto-complete ● Indentation ● Folding
  23. 23. IDE Features ● Deeper knowledge of languages ● Compile / run ● Debugging ● Source code control ● Multi-file projects
  24. 24. More Features ● Everything is configurable ● Everything is extensible ● Everything is programmable
  25. 25. Operating System ● Your operating system is where you live ● Get to know its features ● Design your working environment ● Automate things
  26. 26. Operating Systems ● What do you use your operating system for? ● Web browsing ● Reading email ● Social media ● Development? ○ Virtual machines ○ Containers
  27. 27. Configure Your OS ● Make it as comfortable as possible ● Window decoration ● Window behaviour ● Virtual desktops
  28. 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. 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. 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. 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. 32. Git Advantages ● Distributed model ○ Off-line access ● Branches are easy and quick ● Rebasing ○ Interactive rebasing ● "Fetch" vs "Pull" ● Safety net
  33. 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
  34. 34. Adjacent Technologies
  35. 35. Adjacent Technologies ● What other technologies do you use every day? ● Data storage ○ Databases ○ Data formats ○ XML ○ Caching ● Networking ○ HTTP
  36. 36. Adjacent Technologies ● Testing ○ Types of tests ○ Test automation ● Deployment ○ Jenkins ○ Docker ○ AWS
  37. 37. Data Storage ● How do you store your persistent data? ● Database ○ RDBMS ○ NoSQL ● Data files ○ JSON ○ YAML ○ XML
  38. 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. 39. RDBMS Features ● Which RDBMS features do you use? ● How vendor specific are they? ● Vendor-specific SQL extensions ● Referential integrity ● Stored procedures? ● Triggers?
  40. 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. 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. 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. 43. Data Files ● What formats are your data files? ● How are they processed? ● Are you using the best available tools to process them?
  44. 44. JSON ● Javascript Object Notation ● Popular data interchange format ● AJAX ● Decode to native data structures ● Encode from native data structures
  45. 45. JQ ● General purpose JSON utility ● Reformat JSON ● Extract data from JSON ● Powerful query language
  46. 46. XML ● Still popular ● For some reason ● Need to deal with it ● Find the right tools
  47. 47. XPath ● XML query language ● Extract data from XML documents ● Standard syntax
  48. 48. Networking ● What networking protocols do you use? ● How well do you know them? ● Seven layer model
  49. 49. HTTP ● Can you explain the HTTP request / response cycle? ● To what level of detail? ● What difference does HTTPS / SSL make?
  50. 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. 51. Testing ● Do you write unit tests? ● Does your system have automated integration tests? ● How are your tests run? ● Automatically?
  52. 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. 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. 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. 55. TDD Advantages ● Tests are a specification of your program ● If the tests pass, the program is finished ● Know when to finish
  56. 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. 57. Test Automation ● What test automation frameworks do you know? ● What test automation frameworks do you use? ● Selenium
  58. 58. Test Coverage ● How good are your tests? ● How much of your code is used in your tests? ● Measure to improve
  59. 59. Deployment ● How is your system deployed? ● Where are the servers located? ● Do you care?
  60. 60. Deployment Environments ● What environments do you have? ● Development ● Integration ● Staging ● Production
  61. 61. Deployment Environments ● How is code moved from environment to environment? ● How similar are those environments? ● How are they kept in step?
  62. 62. Database Environments ● How are databases handled in development and testing environments? ● Full database? ● Smaller data sets? ● Anonymised data?
  63. 63. Deployment Options ● Real hardware ● Cloud servers ● Virtual machines ● Containers
  64. 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. 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. 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. 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. 68. Cattle Not Pets ● Treat servers as cattle, not pets ● Make it easy to create new ones ● Do that a lot
  69. 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. 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. 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
  72. 72. Amazon Web Services
  73. 73. Other Cloud Providers ● Google Cloud Platform ● Microsoft Azure ● Oracle Cloud ● Rack Space ● Open Stack (self hosted) ● Etc...
  74. 74. Software Engineering & Architecture
  75. 75. Software Engineering & Architecture ● Software development lifecycle ● Programming paradigms ● Design patterns
  76. 76. Software Development Lifecycle ● Agile vs Waterfall ● Agile Manifesto ● Scrum vs Kanban vs Extreme Programming ● Know your tools ○ Jira ○ Code reviews
  77. 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. 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. 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. 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. 81. Responding to Change ● Requirements will change during the project lifetime ● Be flexible ● Plan for change
  82. 82. Programming Paradigms ● What paradigms does your system use? ● Procedural ● Object Oriented ● Functional ● Who made those choices? ● Why?
  83. 83. Procedural Programming ● Dumb variables ● Procedures, functions ● Hard to maintain ● Hard to scale
  84. 84. Object Oriented Programming ● Classes define both data (attributes) and behaviour (methods) ● Intelligent variables ● Encapsulation ● Subclassing ● Easy to maintain ● Easy to scale
  85. 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. 86. Design Patterns ● "Gang of Four" book ● "Monolithic" architecture ● Service Oriented Architecture ● Microservices
  87. 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
  88. 88. The Business
  89. 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. 90. What Does Your Company Do? ● What service does your company provide? ● Why do customers choose your company? ● What is the USP?
  91. 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. 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. 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. 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?
  95. 95. Personal Development
  96. 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. 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. 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. 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. 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. 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. 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. 103. External Marketing ● How well-know are you outside of your company? ● Write a blog ● Answer questions on forums ● Speak about your work
  104. 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. 105. Blogging Practicalities ● Wordpress ○ Hosted (wordpress.com) ○ Self-hosted (wordpress.org) ● Medium ○ Publications ● Github Pages ● Custom domain
  106. 106. Public Speaking ● Give talks about your projects ● Public speaking isn't as hard as you might think ● Start with a lightning talk
  107. 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. 108. TED ● Excellent examples of talks ● Interesting subject matter ● Engaging speakers ● Well-designed slides ● Something to aim at
  109. 109. Public Speaking Practicalities ● Find somewhere to speak ● Meet-up groups ● Local user groups ● Conferences
  110. 110. Conclusions
  111. 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
  112. 112. The Professional Programmer Dave Cross @davorg dave@perlhacks.com

×