The document discusses the idea that code "cries" when it is difficult to understand and modify. It suggests reframing "code smells" as issues where the code is trying to communicate something but is not being understood. The author argues that software becomes harder to work with over time because developers try to force their own designs rather than letting the code evolve naturally through an iterative process. Developers are encouraged to let go of preconceived designs and diagrams in order to build code in a more organic, timeless way.
In this talk from GOTO Berlin 2013, Cory Foy discusses the importance of listening to your code to know when to refactor, test, and build solutions which will withstand the test of time.
The permanent resident who is honest - Based on Honesty Idioms English Online Inc.
The document provides an overview of a lesson on honesty idioms for language learners. It includes reviewing and practicing idioms like "to play by the rules" and "a monkey business". Learners fill in blanks with the correct idioms, listen to an audio on mobility rights for permanent residents, discuss experiences, and learn about adjective clauses. The lesson aims to improve vocabulary, listening, speaking, grammar and reflection on learning.
In this talk from Red Hat's 2014 Agile Conference, Cory Foy talks about the conditions necessary to bring about true organizational change towards agility. In addition, he covers patterns of adoptions and a variety of techniques used at scale
Part of this Agile Requirements Workshop was to do a 20/20 Vision ranking game with the participants to understand and discuss what their "Biggest Challenge" is in Agile Requirements. This is draft one of the team's ranking of these challenges. More context will be forthcoming.
Many companies have created a proper noun titled "Agile". But that word doesn't exist as a proper noun. The goal isn't to achieve some mythical ethos of "Agile" but instead to have organizational agility. This presentation covers the principles of Organizational Agility and how to make your organization get to the goal of agility.
These are the slides from Robert "Uncle Bob" Martin's talk at the Chicago Day of Mobile event held in March 2010. Slides posted with permission from Bob.
The document discusses Innovation Games, which are serious games used to solve product strategy and management problems. Innovation Games are played with customers, stakeholders, online or in-person. They work to manage roadmaps, identify new products, train sales teams, and more. Some example games described are Product Box, Speed Boat, Prune the Product Tree, and Spider Web. Case studies show how companies like Wyse Technologies, Qualcomm, and Aladdin Knowledge Systems have used Innovation Games to get customer feedback and insights to improve their products.
In this talk from GOTO Berlin 2013, Cory Foy discusses the importance of listening to your code to know when to refactor, test, and build solutions which will withstand the test of time.
The permanent resident who is honest - Based on Honesty Idioms English Online Inc.
The document provides an overview of a lesson on honesty idioms for language learners. It includes reviewing and practicing idioms like "to play by the rules" and "a monkey business". Learners fill in blanks with the correct idioms, listen to an audio on mobility rights for permanent residents, discuss experiences, and learn about adjective clauses. The lesson aims to improve vocabulary, listening, speaking, grammar and reflection on learning.
In this talk from Red Hat's 2014 Agile Conference, Cory Foy talks about the conditions necessary to bring about true organizational change towards agility. In addition, he covers patterns of adoptions and a variety of techniques used at scale
Part of this Agile Requirements Workshop was to do a 20/20 Vision ranking game with the participants to understand and discuss what their "Biggest Challenge" is in Agile Requirements. This is draft one of the team's ranking of these challenges. More context will be forthcoming.
Many companies have created a proper noun titled "Agile". But that word doesn't exist as a proper noun. The goal isn't to achieve some mythical ethos of "Agile" but instead to have organizational agility. This presentation covers the principles of Organizational Agility and how to make your organization get to the goal of agility.
These are the slides from Robert "Uncle Bob" Martin's talk at the Chicago Day of Mobile event held in March 2010. Slides posted with permission from Bob.
The document discusses Innovation Games, which are serious games used to solve product strategy and management problems. Innovation Games are played with customers, stakeholders, online or in-person. They work to manage roadmaps, identify new products, train sales teams, and more. Some example games described are Product Box, Speed Boat, Prune the Product Tree, and Spider Web. Case studies show how companies like Wyse Technologies, Qualcomm, and Aladdin Knowledge Systems have used Innovation Games to get customer feedback and insights to improve their products.
The document provides a "survival guide" consisting of 9 tips for professional success. The tips include: controlling your ego, taking risks, questioning assumptions, learning from mistakes, copying others' ideas strategically, accepting criticism, iterating ideas, focusing on details through hard work, and maintaining work-life balance by saying no. The overall message is about overcoming challenges through personal growth, risk-taking, learning from failures and others, and valuing one's time.
The document describes the author's early experiences with web development in the 1990s. It discusses how in 1994-1995, when the author was a student, they created one of the first Perl CGI programs - a Daleks robot puzzle game. They learned HTML, Perl and CGI programming through this project. It also covers how in 1995, as one of their first projects as a webmaster, they developed a website for a Muslim organization that showcased innovative techniques for displaying Arabic text as images due to browser limitations at the time.
1) Lean user research focuses on understanding user behaviors, needs, and motivations through observation rather than interviews to avoid inaccurate self-reported data. It is lightweight and iterative.
2) Effective user research techniques include observing users in their natural context to understand routines, interrupts, and transitions, rather than asking hypothetical questions. It is best to watch 5-6 people using the product.
3) The goal is to understand the problem driving user needs rather than focusing on suggested features, in order to design solutions that perfectly solve the right problems.
The document provides instructions for creating an account and submitting a paper writing request on the HelpWriting.net website. It outlines a 5-step process: 1) Create an account with an email and password. 2) Complete a form with paper details, sources, and deadline. 3) Review writer bids and qualifications and place a deposit. 4) Review the completed paper and authorize final payment. 5) Request revisions until fully satisfied, with a refund option for plagiarized content. The summary focuses on outlining the key steps involved in the paper writing process on the specified website.
Psychology for designers or 3 predictions from psychology for the future of ...Joe Leech
How can an understanding of psychology make your designs better? @mrjoe will make three predictions for the future of web design based on psychology.
We'll also cover
-Why Siri doesn't work very well and won't for a while
-Why right now, we are designing like Sheldon from the Big Bang Theory
-How we'll be designing in five years time
Psychology for designers or 3 predictions from psychology for the future of ...cxpartners
The document discusses three predictions for the future of web design based on psychology:
1. Designing like Conversation - Web design will focus more on synchronous interactions like conversations.
2. Designing with Mental Models of Relevance - Design will involve understanding users' mental models and recognizing patterns of relevance based on multiple context elements.
3. Designing with Olfaction - The possibility of designing smell-based interactions is discussed, though this prediction is acknowledged to be less likely. The key is leveraging how memory of smells can create experiences. Social aspects of modeling other minds and shared cognition are highlighted as important influences on these predictions.
The document discusses 10 common grammar questions and mistakes made by native English speakers. It addresses issues like whether to use which vs that, into vs in to, affect vs effect, how many spaces after a period, spelling out numbers, ensure vs insure, a vs an, people vs persons, there is vs there are, and lesser vs fewer. For each topic, it provides examples and rules of thumb to clarify the correct usage. It concludes with a grammar quiz testing these topics.
Tickets Make Ops Unnecessarily Miserable: The Journey to Self-ServiceRundeck
Damon Edwards, Alex Honor, Nathan Fluegel of Rundeck presentation from All Day DevOps on Oct 17, 2018
See a Demo of Rundeck Enterprise :
https://www.rundeck.com/see-demo
--or--
Download Rundeck Open Source here:
https://rundeck.com/open-source
Connect:
Stack Overflow community: https://stackoverflow.com/questions/tagged/rundeck
Github: https://github.com/rundeck/rundeck/issues
Twitter: https://twitter.com/Rundeck
Facebook: https://www.facebook.com/RundeckInc/
LinkedIn: www.linkedin.com › company › rundeck-inc
The document provides tips and strategies for do-it-yourself marketers. It discusses focusing marketing efforts on understanding where potential customers are located (social media, websites, etc.), engaging customers through email marketing, search engine optimization techniques, and best practices for using social media. Specific tools and strategies are recommended, such as using Google Analytics and focusing on building relationships on one primary social media platform.
The document discusses marketing principles for small software vendors based on the book "The 22 Immutable Laws of Marketing" by Al Ries and Jack Trout. It summarizes the key points of the first 5 laws: 1) It is better to be the number one player in a category. 2) If you cannot be first, create a new category where you can be number one. 3) It is better to be first in people's minds than first in the market. 4) Perception is more important than reality in product battles. 5) The most powerful marketing message focuses on owning a single word or idea in customers' minds.
Lined Writing Paper With Picture Space. Online assignment writing service.Rebecca Harris
1. The document discusses how to request and complete an assignment writing request on the HelpWriting.net site. It involves creating an account, completing an order form with instructions and deadline, and reviewing writer bids before choosing a writer and placing a deposit.
2. After receiving the completed paper, the customer can request revisions if needed and is ensured of original, high-quality content or a full refund.
3. HelpWriting.net uses a bidding system where customers can choose from qualified writers based on qualifications, order history, and feedback.
Talk to Frank is a service that provides drug information to young adults. We were asked to redesign it by exploring their needs when looking for information about illegal drugs.
At the heart of this project was inclusive design.
This session will reflect on what this meant in practice for research, UX, design and development.
We will share what we learned and give you the tools you need to ensure your next project has inclusive design at its core.
SpeakUp – A Mobile App Facilitating Audience InteractionSten Govaerts
the presentation of a paper with the same title, written by Adrian Holzer, Sten Govaerts, Jan Ondrus, Andrii Vozniuk,
David Rigaud, Benoît Garbinato & Denis Gillet.
presented at the 12th International Conference on Web-based Learning, ICWL 2013, October 6-9 2013, Kenting, Taiwan
Christian Heilmann - Building human interfaces powered by AI - Codemotion Ber...Codemotion
This document discusses building human interfaces powered by AI. It covers various AI technologies like natural language processing, computer vision, sentiment analysis and speech recognition that can help create more intuitive interfaces. It also addresses challenges around data privacy, bias, transparency and the responsible use of AI. The document provides examples of how these technologies can automate tasks, reduce errors and help humans interact with machines in a more natural way. It emphasizes that AI should be designed to serve human needs.
Model storming - a different approach to collaborative model discovery (Vilni...Alberto Brandolini
Many complex problems aren't properly managed because they aren't properly seen. To visualise them you need a lot of space and unusual techniques that help you model the unknown, in an interactive and extremely productive fashion.
Designing Great APIs: Learning from Jony Ive, Orwell, and the Kano ModelJonathan Dahl
APIs are interfaces, just like UIs. But while a website or a mobile app is designed to be used by a consumer, an API has two very specific audiences in mind: other systems, and the programmers who build them.
A well-designed API can make or break an application. So how do developers build great APIs? What design principles should be followed? We will discuss these questions based on the work of thinkers in the areas of industrial design, writing, and a product development theory.
Hacker To Founder - Filipino Technical Co-Founders at WorkPaul Pajo
The document discusses technical and non-technical co-founders in startups. It notes that technical co-founders focus on code commits while non-technical co-founders ask about overall progress. Interviews are included from technical and non-technical co-founders discussing their experiences. Key points discussed include the importance of balance between technical and business skills, focusing on execution over ideas, and how founders' relationships can impact startup culture.
D3 Design By Games Agile India Pune 2005Henry Jacob
The document discusses the process of designing a digital solution from understanding customer needs to prototyping and testing ideas. It presents 13 steps: 1) defining the project meaning and goals, 2) naming the project, 3) analyzing key customer personas, 4) mapping the problem domain, 5) researching user roles, 6) understanding a user's daily tasks, 7) reimagining processes, 8) capturing user stories, 9) designing interactions, 10) outlining navigation, 11) creating low-fidelity prototypes, 12) envisioning intelligent features, and 13) testing designs from the user's perspective. The overall approach emphasizes deep customer understanding before developing technology-driven solutions.
10 Signs that your startup is likely to failMilan Vrekic
This document outlines 10 signs that a startup is likely to fail. These include: 1) Trouble hiring employees, 2) Scaling the business without validating the product-market fit, 3) Trouble shipping products, 4) The founders not working full-time, 5) Having more than 3 co-founders, 6) The founding team having similar skills without filling important gaps, 7) Not having a technical co-founder, 8) Not pivoting when needed or pivoting too many times, 9) Ignoring feedback from customers and mentors, and 10) Being too attached to the startup idea and not willing to change course if needed.
Defending Commoditization: Mapping Gameplays and Strategies to Stay Ahead in ...Cory Foy
One of the goals of agility is to be able to respond rapidly to market change. But do you feel prepared to wake up to a product announcement from Amazon disrupting your entire business? Would you know what steps to take?
Instead of being worried, we can get mapping! Wardley Mapping, coined by Simon Wardley, is a way of understanding markets and components in a way that allows us to visualize and anticipate change in markets - and develop strategies and gameplays for how we can respond to them.
This session uses several real-world cases of work with organizations to map their landscape and show the strategies and gameplays that allowed them to reshape where they were headed - and allow you to understand your organization’s market and how you can think about features and product direction.
Stratgic Play - Doing the Right Thing at the Right TimeCory Foy
In this talk from Red Hat Agile Day 2015, Cory Foy covers the notion of Strategic Play by covering tools like Wardley Maps, Business Model Canvas, Purpose-Based Alignment Model and Product Vision Statement
The document provides a "survival guide" consisting of 9 tips for professional success. The tips include: controlling your ego, taking risks, questioning assumptions, learning from mistakes, copying others' ideas strategically, accepting criticism, iterating ideas, focusing on details through hard work, and maintaining work-life balance by saying no. The overall message is about overcoming challenges through personal growth, risk-taking, learning from failures and others, and valuing one's time.
The document describes the author's early experiences with web development in the 1990s. It discusses how in 1994-1995, when the author was a student, they created one of the first Perl CGI programs - a Daleks robot puzzle game. They learned HTML, Perl and CGI programming through this project. It also covers how in 1995, as one of their first projects as a webmaster, they developed a website for a Muslim organization that showcased innovative techniques for displaying Arabic text as images due to browser limitations at the time.
1) Lean user research focuses on understanding user behaviors, needs, and motivations through observation rather than interviews to avoid inaccurate self-reported data. It is lightweight and iterative.
2) Effective user research techniques include observing users in their natural context to understand routines, interrupts, and transitions, rather than asking hypothetical questions. It is best to watch 5-6 people using the product.
3) The goal is to understand the problem driving user needs rather than focusing on suggested features, in order to design solutions that perfectly solve the right problems.
The document provides instructions for creating an account and submitting a paper writing request on the HelpWriting.net website. It outlines a 5-step process: 1) Create an account with an email and password. 2) Complete a form with paper details, sources, and deadline. 3) Review writer bids and qualifications and place a deposit. 4) Review the completed paper and authorize final payment. 5) Request revisions until fully satisfied, with a refund option for plagiarized content. The summary focuses on outlining the key steps involved in the paper writing process on the specified website.
Psychology for designers or 3 predictions from psychology for the future of ...Joe Leech
How can an understanding of psychology make your designs better? @mrjoe will make three predictions for the future of web design based on psychology.
We'll also cover
-Why Siri doesn't work very well and won't for a while
-Why right now, we are designing like Sheldon from the Big Bang Theory
-How we'll be designing in five years time
Psychology for designers or 3 predictions from psychology for the future of ...cxpartners
The document discusses three predictions for the future of web design based on psychology:
1. Designing like Conversation - Web design will focus more on synchronous interactions like conversations.
2. Designing with Mental Models of Relevance - Design will involve understanding users' mental models and recognizing patterns of relevance based on multiple context elements.
3. Designing with Olfaction - The possibility of designing smell-based interactions is discussed, though this prediction is acknowledged to be less likely. The key is leveraging how memory of smells can create experiences. Social aspects of modeling other minds and shared cognition are highlighted as important influences on these predictions.
The document discusses 10 common grammar questions and mistakes made by native English speakers. It addresses issues like whether to use which vs that, into vs in to, affect vs effect, how many spaces after a period, spelling out numbers, ensure vs insure, a vs an, people vs persons, there is vs there are, and lesser vs fewer. For each topic, it provides examples and rules of thumb to clarify the correct usage. It concludes with a grammar quiz testing these topics.
Tickets Make Ops Unnecessarily Miserable: The Journey to Self-ServiceRundeck
Damon Edwards, Alex Honor, Nathan Fluegel of Rundeck presentation from All Day DevOps on Oct 17, 2018
See a Demo of Rundeck Enterprise :
https://www.rundeck.com/see-demo
--or--
Download Rundeck Open Source here:
https://rundeck.com/open-source
Connect:
Stack Overflow community: https://stackoverflow.com/questions/tagged/rundeck
Github: https://github.com/rundeck/rundeck/issues
Twitter: https://twitter.com/Rundeck
Facebook: https://www.facebook.com/RundeckInc/
LinkedIn: www.linkedin.com › company › rundeck-inc
The document provides tips and strategies for do-it-yourself marketers. It discusses focusing marketing efforts on understanding where potential customers are located (social media, websites, etc.), engaging customers through email marketing, search engine optimization techniques, and best practices for using social media. Specific tools and strategies are recommended, such as using Google Analytics and focusing on building relationships on one primary social media platform.
The document discusses marketing principles for small software vendors based on the book "The 22 Immutable Laws of Marketing" by Al Ries and Jack Trout. It summarizes the key points of the first 5 laws: 1) It is better to be the number one player in a category. 2) If you cannot be first, create a new category where you can be number one. 3) It is better to be first in people's minds than first in the market. 4) Perception is more important than reality in product battles. 5) The most powerful marketing message focuses on owning a single word or idea in customers' minds.
Lined Writing Paper With Picture Space. Online assignment writing service.Rebecca Harris
1. The document discusses how to request and complete an assignment writing request on the HelpWriting.net site. It involves creating an account, completing an order form with instructions and deadline, and reviewing writer bids before choosing a writer and placing a deposit.
2. After receiving the completed paper, the customer can request revisions if needed and is ensured of original, high-quality content or a full refund.
3. HelpWriting.net uses a bidding system where customers can choose from qualified writers based on qualifications, order history, and feedback.
Talk to Frank is a service that provides drug information to young adults. We were asked to redesign it by exploring their needs when looking for information about illegal drugs.
At the heart of this project was inclusive design.
This session will reflect on what this meant in practice for research, UX, design and development.
We will share what we learned and give you the tools you need to ensure your next project has inclusive design at its core.
SpeakUp – A Mobile App Facilitating Audience InteractionSten Govaerts
the presentation of a paper with the same title, written by Adrian Holzer, Sten Govaerts, Jan Ondrus, Andrii Vozniuk,
David Rigaud, Benoît Garbinato & Denis Gillet.
presented at the 12th International Conference on Web-based Learning, ICWL 2013, October 6-9 2013, Kenting, Taiwan
Christian Heilmann - Building human interfaces powered by AI - Codemotion Ber...Codemotion
This document discusses building human interfaces powered by AI. It covers various AI technologies like natural language processing, computer vision, sentiment analysis and speech recognition that can help create more intuitive interfaces. It also addresses challenges around data privacy, bias, transparency and the responsible use of AI. The document provides examples of how these technologies can automate tasks, reduce errors and help humans interact with machines in a more natural way. It emphasizes that AI should be designed to serve human needs.
Model storming - a different approach to collaborative model discovery (Vilni...Alberto Brandolini
Many complex problems aren't properly managed because they aren't properly seen. To visualise them you need a lot of space and unusual techniques that help you model the unknown, in an interactive and extremely productive fashion.
Designing Great APIs: Learning from Jony Ive, Orwell, and the Kano ModelJonathan Dahl
APIs are interfaces, just like UIs. But while a website or a mobile app is designed to be used by a consumer, an API has two very specific audiences in mind: other systems, and the programmers who build them.
A well-designed API can make or break an application. So how do developers build great APIs? What design principles should be followed? We will discuss these questions based on the work of thinkers in the areas of industrial design, writing, and a product development theory.
Hacker To Founder - Filipino Technical Co-Founders at WorkPaul Pajo
The document discusses technical and non-technical co-founders in startups. It notes that technical co-founders focus on code commits while non-technical co-founders ask about overall progress. Interviews are included from technical and non-technical co-founders discussing their experiences. Key points discussed include the importance of balance between technical and business skills, focusing on execution over ideas, and how founders' relationships can impact startup culture.
D3 Design By Games Agile India Pune 2005Henry Jacob
The document discusses the process of designing a digital solution from understanding customer needs to prototyping and testing ideas. It presents 13 steps: 1) defining the project meaning and goals, 2) naming the project, 3) analyzing key customer personas, 4) mapping the problem domain, 5) researching user roles, 6) understanding a user's daily tasks, 7) reimagining processes, 8) capturing user stories, 9) designing interactions, 10) outlining navigation, 11) creating low-fidelity prototypes, 12) envisioning intelligent features, and 13) testing designs from the user's perspective. The overall approach emphasizes deep customer understanding before developing technology-driven solutions.
10 Signs that your startup is likely to failMilan Vrekic
This document outlines 10 signs that a startup is likely to fail. These include: 1) Trouble hiring employees, 2) Scaling the business without validating the product-market fit, 3) Trouble shipping products, 4) The founders not working full-time, 5) Having more than 3 co-founders, 6) The founding team having similar skills without filling important gaps, 7) Not having a technical co-founder, 8) Not pivoting when needed or pivoting too many times, 9) Ignoring feedback from customers and mentors, and 10) Being too attached to the startup idea and not willing to change course if needed.
Defending Commoditization: Mapping Gameplays and Strategies to Stay Ahead in ...Cory Foy
One of the goals of agility is to be able to respond rapidly to market change. But do you feel prepared to wake up to a product announcement from Amazon disrupting your entire business? Would you know what steps to take?
Instead of being worried, we can get mapping! Wardley Mapping, coined by Simon Wardley, is a way of understanding markets and components in a way that allows us to visualize and anticipate change in markets - and develop strategies and gameplays for how we can respond to them.
This session uses several real-world cases of work with organizations to map their landscape and show the strategies and gameplays that allowed them to reshape where they were headed - and allow you to understand your organization’s market and how you can think about features and product direction.
Stratgic Play - Doing the Right Thing at the Right TimeCory Foy
In this talk from Red Hat Agile Day 2015, Cory Foy covers the notion of Strategic Play by covering tools like Wardley Maps, Business Model Canvas, Purpose-Based Alignment Model and Product Vision Statement
Continuous Deployment and Testing Workshop from Better Software WestCory Foy
In this workshop from the 2015 SQE Better Software West conference, Cory Foy details the Continuous Paradigm companies are embracing - including Continuous Integration, Continuous Deployment, and Continuous Testing. This presentation was co-created by Jared Richardson.
Choosing Between Scrum and Kanban - TriAgile 2015Cory Foy
The document compares and contrasts the Scrum and Kanban frameworks. Scrum is a framework that utilizes roles, artifacts, and events like sprints, stand-ups, and planning. Kanban focuses on visualizing workflow, limiting work-in-process, measuring and managing flow, making policies explicit, and using models for continuous improvement. Both aim to provide structure, frequent feedback, and adapting processes through inspecting outcomes. However, Kanban emphasizes evolutionary change through techniques like limiting work-in-process while Scrum relies more on timeboxed sprints.
In the software development world, we spend a lot of our time coding, and very little practicing. In this presentation to the Triangle.rb group, Smashing Boxes CTO Cory Foy talks about a focused development practice called Code Katas - and how they can help you improve your hiring, your team, and your own programming abilities
In this talk from Southern Fried Agile 2014, Cory Foy gives an overview of the patterns necessary to have successful agility when working with distributed and dispersed teams. He looks at Scrum, Kanban and various virtual tools.
In this talk from Triangle.rb, Cory Foy goes over basic language features of Ruby, along with some gotchas from David Black's "The Well Grounded Rubyist". We cover variables, classes, blocks, and other aspects.
Agile Roots: The Agile Mindset - Agility Across the OrganizationCory Foy
In this talk from Agile Roots 2014, Cory Foy talks about what is necessary for agility across the entire enterprise - regardless of whether you are using Agile, Lean, or Waterfall. Cory also covers the three principles and four value statements of agility.
Triangle.rb - How Secure is Your Rails Site, Anyway?Cory Foy
In this talk from Triangle.rb, Cory Foy details the state of Rails security, including paying attention to libraries you use. He includes real world examples of exploits, and links to resources
In this talk from a Tampa 8th Light University, Senior Craftsman Cory Foy details the design patterns used in Rails, and shows their use and implementation while reference Fowler's PoEAA and Alexander's Timeless Way of Building
This document discusses the importance of listening to code to understand what it is communicating. It recommends deciding to listen, listening for the whole message without personal biases, being patient, curious, and testing your understanding. Other topics covered include katas, koans, adding new features, design principles like SOLID, commonality/variability analysis, and the need for context to truly understand code.
Getting Unstuck: Working with Legacy Code and DataCory Foy
From this presentation for the IASA in 2007, Cory covers common challenges in dealing with Legacy Code and Data, and some tools and techniques for handling them.
In this session from Øredev 2010 in Malmö, Sweden, Cory Foy tackles what it takes to foster Software Craftsmanship and why it's so important to value those people who are taking responsibility for their careers
In this session from Øredev 2010 in Malmö, Sweden, Cory Foy covers the concepts of Koans and Katas in the software world by explaining the concepts of learning models such as the Dreyfus Model of Skills Acquisition, Shu Ha Ri and others.
Freshworks Rethinks NoSQL for Rapid Scaling & Cost-EfficiencyScyllaDB
Freshworks creates AI-boosted business software that helps employees work more efficiently and effectively. Managing data across multiple RDBMS and NoSQL databases was already a challenge at their current scale. To prepare for 10X growth, they knew it was time to rethink their database strategy. Learn how they architected a solution that would simplify scaling while keeping costs under control.
Fueling AI with Great Data with Airbyte WebinarZilliz
This talk will focus on how to collect data from a variety of sources, leveraging this data for RAG and other GenAI use cases, and finally charting your course to productionalization.
Essentials of Automations: Exploring Attributes & Automation ParametersSafe Software
Building automations in FME Flow can save time, money, and help businesses scale by eliminating data silos and providing data to stakeholders in real-time. One essential component to orchestrating complex automations is the use of attributes & automation parameters (both formerly known as “keys”). In fact, it’s unlikely you’ll ever build an Automation without using these components, but what exactly are they?
Attributes & automation parameters enable the automation author to pass data values from one automation component to the next. During this webinar, our FME Flow Specialists will cover leveraging the three types of these output attributes & parameters in FME Flow: Event, Custom, and Automation. As a bonus, they’ll also be making use of the Split-Merge Block functionality.
You’ll leave this webinar with a better understanding of how to maximize the potential of automations by making use of attributes & automation parameters, with the ultimate goal of setting your enterprise integration workflows up on autopilot.
Digital Banking in the Cloud: How Citizens Bank Unlocked Their MainframePrecisely
Inconsistent user experience and siloed data, high costs, and changing customer expectations – Citizens Bank was experiencing these challenges while it was attempting to deliver a superior digital banking experience for its clients. Its core banking applications run on the mainframe and Citizens was using legacy utilities to get the critical mainframe data to feed customer-facing channels, like call centers, web, and mobile. Ultimately, this led to higher operating costs (MIPS), delayed response times, and longer time to market.
Ever-changing customer expectations demand more modern digital experiences, and the bank needed to find a solution that could provide real-time data to its customer channels with low latency and operating costs. Join this session to learn how Citizens is leveraging Precisely to replicate mainframe data to its customer channels and deliver on their “modern digital bank” experiences.
Generating privacy-protected synthetic data using Secludy and MilvusZilliz
During this demo, the founders of Secludy will demonstrate how their system utilizes Milvus to store and manipulate embeddings for generating privacy-protected synthetic data. Their approach not only maintains the confidentiality of the original data but also enhances the utility and scalability of LLMs under privacy constraints. Attendees, including machine learning engineers, data scientists, and data managers, will witness first-hand how Secludy's integration with Milvus empowers organizations to harness the power of LLMs securely and efficiently.
What is an RPA CoE? Session 1 – CoE VisionDianaGray10
In the first session, we will review the organization's vision and how this has an impact on the COE Structure.
Topics covered:
• The role of a steering committee
• How do the organization’s priorities determine CoE Structure?
Speaker:
Chris Bolin, Senior Intelligent Automation Architect Anika Systems
Skybuffer SAM4U tool for SAP license adoptionTatiana Kojar
Manage and optimize your license adoption and consumption with SAM4U, an SAP free customer software asset management tool.
SAM4U, an SAP complimentary software asset management tool for customers, delivers a detailed and well-structured overview of license inventory and usage with a user-friendly interface. We offer a hosted, cost-effective, and performance-optimized SAM4U setup in the Skybuffer Cloud environment. You retain ownership of the system and data, while we manage the ABAP 7.58 infrastructure, ensuring fixed Total Cost of Ownership (TCO) and exceptional services through the SAP Fiori interface.
How to Interpret Trends in the Kalyan Rajdhani Mix Chart.pdfChart Kalyan
A Mix Chart displays historical data of numbers in a graphical or tabular form. The Kalyan Rajdhani Mix Chart specifically shows the results of a sequence of numbers over different periods.
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-und-domino-lizenzkostenreduzierung-in-der-welt-von-dlau/
DLAU und die Lizenzen nach dem CCB- und CCX-Modell sind für viele in der HCL-Community seit letztem Jahr ein heißes Thema. Als Notes- oder Domino-Kunde haben Sie vielleicht mit unerwartet hohen Benutzerzahlen und Lizenzgebühren zu kämpfen. Sie fragen sich vielleicht, wie diese neue Art der Lizenzierung funktioniert und welchen Nutzen sie Ihnen bringt. Vor allem wollen Sie sicherlich Ihr Budget einhalten und Kosten sparen, wo immer möglich. Das verstehen wir und wir möchten Ihnen dabei helfen!
Wir erklären Ihnen, wie Sie häufige Konfigurationsprobleme lösen können, die dazu führen können, dass mehr Benutzer gezählt werden als nötig, und wie Sie überflüssige oder ungenutzte Konten identifizieren und entfernen können, um Geld zu sparen. Es gibt auch einige Ansätze, die zu unnötigen Ausgaben führen können, z. B. wenn ein Personendokument anstelle eines Mail-Ins für geteilte Mailboxen verwendet wird. Wir zeigen Ihnen solche Fälle und deren Lösungen. Und natürlich erklären wir Ihnen das neue Lizenzmodell.
Nehmen Sie an diesem Webinar teil, bei dem HCL-Ambassador Marc Thomas und Gastredner Franz Walder Ihnen diese neue Welt näherbringen. Es vermittelt Ihnen die Tools und das Know-how, um den Überblick zu bewahren. Sie werden in der Lage sein, Ihre Kosten durch eine optimierte Domino-Konfiguration zu reduzieren und auch in Zukunft gering zu halten.
Diese Themen werden behandelt
- Reduzierung der Lizenzkosten durch Auffinden und Beheben von Fehlkonfigurationen und überflüssigen Konten
- Wie funktionieren CCB- und CCX-Lizenzen wirklich?
- Verstehen des DLAU-Tools und wie man es am besten nutzt
- Tipps für häufige Problembereiche, wie z. B. Team-Postfächer, Funktions-/Testbenutzer usw.
- Praxisbeispiele und Best Practices zum sofortigen Umsetzen
Main news related to the CCS TSI 2023 (2023/1695)Jakub Marek
An English 🇬🇧 translation of a presentation to the speech I gave about the main changes brought by CCS TSI 2023 at the biggest Czech conference on Communications and signalling systems on Railways, which was held in Clarion Hotel Olomouc from 7th to 9th November 2023 (konferenceszt.cz). Attended by around 500 participants and 200 on-line followers.
The original Czech 🇨🇿 version of the presentation can be found here: https://www.slideshare.net/slideshow/hlavni-novinky-souvisejici-s-ccs-tsi-2023-2023-1695/269688092 .
The videorecording (in Czech) from the presentation is available here: https://youtu.be/WzjJWm4IyPk?si=SImb06tuXGb30BEH .
zkStudyClub - LatticeFold: A Lattice-based Folding Scheme and its Application...Alex Pruden
Folding is a recent technique for building efficient recursive SNARKs. Several elegant folding protocols have been proposed, such as Nova, Supernova, Hypernova, Protostar, and others. However, all of them rely on an additively homomorphic commitment scheme based on discrete log, and are therefore not post-quantum secure. In this work we present LatticeFold, the first lattice-based folding protocol based on the Module SIS problem. This folding protocol naturally leads to an efficient recursive lattice-based SNARK and an efficient PCD scheme. LatticeFold supports folding low-degree relations, such as R1CS, as well as high-degree relations, such as CCS. The key challenge is to construct a secure folding protocol that works with the Ajtai commitment scheme. The difficulty, is ensuring that extracted witnesses are low norm through many rounds of folding. We present a novel technique using the sumcheck protocol to ensure that extracted witnesses are always low norm no matter how many rounds of folding are used. Our evaluation of the final proof system suggests that it is as performant as Hypernova, while providing post-quantum security.
Paper Link: https://eprint.iacr.org/2024/257
Have you ever been confused by the myriad of choices offered by AWS for hosting a website or an API?
Lambda, Elastic Beanstalk, Lightsail, Amplify, S3 (and more!) can each host websites + APIs. But which one should we choose?
Which one is cheapest? Which one is fastest? Which one will scale to meet our needs?
Join me in this session as we dive into each AWS hosting service to determine which one is best for your scenario and explain why!
Northern Engraving | Nameplate Manufacturing Process - 2024Northern Engraving
Manufacturing custom quality metal nameplates and badges involves several standard operations. Processes include sheet prep, lithography, screening, coating, punch press and inspection. All decoration is completed in the flat sheet with adhesive and tooling operations following. The possibilities for creating unique durable nameplates are endless. How will you create your brand identity? We can help!
Northern Engraving | Nameplate Manufacturing Process - 2024
SQE Boston - When Code Cries
1. When Code Cries
Cory Foy
@cory_foy
foyc@coryfoy.com
http://www.coryfoy.com
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Reading from Timeless Way. Then: All of us here are technologists in some way. We desire to
build things that people will use. Living software. But if you look at our industry, the fruit of
our labors is not living software. The majority of software out there has a common attribute.
It is:
1
2. Bad Code
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Bad Code is the bane of the software industry. Why is it that, over time, code becomes harder
and harder to work with - and how can we prevent ours from ending up with the same fate?
To answer that, perhaps we should start with identifying what quality code is. So, is this
quality code?
2
3. Is this quality code?
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Why do we like Easy to Change code? Because it is a lower cognitive burden. Because writing
code is hard enough, as we’ll see.
3
4. Is this quality code?
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Why do we like Easy to Change code? Because it is a lower cognitive burden. Because writing
code is hard enough, as we’ll see.
3
5. Cognitively Undemanding
Where we want our
software
Context
Embedded
Context
Reduced
Modifying Software we
wrote
@cory_foy
Modifying Software we
didn’t write
Cognitively Demanding
foyc@coryfoy.com
Thursday, November 14, 13
We want code that is in the upper right quadrant. But, if we’re lucky to be modifying our own
code, it’s in the lower left. Worse case, we don’t even have the context, so it’s in the lower
right. Now, if we have tests, that helps increase the context. But when we don’t, we can end
up with code that looks like
4
6. Cognitively Undemanding
Where we want our
software
Context
Embedded
Context
Reduced
Modifying Software we
wrote
@cory_foy
Modifying Software we
didn’t write
Cognitively Demanding
foyc@coryfoy.com
Thursday, November 14, 13
We want code that is in the upper right quadrant. But, if we’re lucky to be modifying our own
code, it’s in the lower left. Worse case, we don’t even have the context, so it’s in the lower
right. Now, if we have tests, that helps increase the context. But when we don’t, we can end
up with code that looks like
4
7. Cognitively Undemanding
Where we want our
software
Context
Embedded
Context
Reduced
Modifying Software we
wrote
@cory_foy
Modifying Software we
didn’t write
Cognitively Demanding
foyc@coryfoy.com
Thursday, November 14, 13
We want code that is in the upper right quadrant. But, if we’re lucky to be modifying our own
code, it’s in the lower left. Worse case, we don’t even have the context, so it’s in the lower
right. Now, if we have tests, that helps increase the context. But when we don’t, we can end
up with code that looks like
4
8. Cognitively Undemanding
Where we want our
software
Context
Embedded
Context
Reduced
Modifying Software we
wrote
@cory_foy
Modifying Software we
didn’t write
Cognitively Demanding
foyc@coryfoy.com
Thursday, November 14, 13
We want code that is in the upper right quadrant. But, if we’re lucky to be modifying our own
code, it’s in the lower left. Worse case, we don’t even have the context, so it’s in the lower
right. Now, if we have tests, that helps increase the context. But when we don’t, we can end
up with code that looks like
4
9. @cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
5
Code that isn’t a joy. That is anti-joy. Code which is frustrating to be around. This is not code
that is alive - this is code which has problems. And these problems - we tend to name them
something. When we see something not right in code, what do we say?
10. @cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
5
Code that isn’t a joy. That is anti-joy. Code which is frustrating to be around. This is not code
that is alive - this is code which has problems. And these problems - we tend to name them
something. When we see something not right in code, what do we say?
11. @cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
5
Code that isn’t a joy. That is anti-joy. Code which is frustrating to be around. This is not code
that is alive - this is code which has problems. And these problems - we tend to name them
something. When we see something not right in code, what do we say?
12. @cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
5
Code that isn’t a joy. That is anti-joy. Code which is frustrating to be around. This is not code
that is alive - this is code which has problems. And these problems - we tend to name them
something. When we see something not right in code, what do we say?
13. @cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
5
Code that isn’t a joy. That is anti-joy. Code which is frustrating to be around. This is not code
that is alive - this is code which has problems. And these problems - we tend to name them
something. When we see something not right in code, what do we say?
14. @cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
5
Code that isn’t a joy. That is anti-joy. Code which is frustrating to be around. This is not code
that is alive - this is code which has problems. And these problems - we tend to name them
something. When we see something not right in code, what do we say?
15. @cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
5
Code that isn’t a joy. That is anti-joy. Code which is frustrating to be around. This is not code
that is alive - this is code which has problems. And these problems - we tend to name them
something. When we see something not right in code, what do we say?
16. @cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
5
Code that isn’t a joy. That is anti-joy. Code which is frustrating to be around. This is not code
that is alive - this is code which has problems. And these problems - we tend to name them
something. When we see something not right in code, what do we say?
17. Code Smells
@cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
6
Right - “Smelly Code”. But what I’d like to do today is reframe the discussion slightly. Instead
of telling our code that it smells, let’s recognize something else - our code is trying to talk to
us.
18. Code Talks
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
And imagine trying to talk to someone about something important - say, the building is on
fire - and them not understanding your strange gestures and telling you you are smelly.
Would that make you happy? It doesn’t make our code happy. And if I can take some poetic
license, I’d even say that code cries
7
19. Code Cries
@cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
8
And our code cries not because it is smelly, but because no one understands what it is trying
to say. It’s trying to point out what it wants to do, what is important, and how to use it. And it
isn’t happy about that! Too often we try to force what we want, what we think is best.
20. Code Cries
Because No One
Understands What It Is
Saying
@cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
8
And our code cries not because it is smelly, but because no one understands what it is trying
to say. It’s trying to point out what it wants to do, what is important, and how to use it. And it
isn’t happy about that! Too often we try to force what we want, what we think is best.
21. “...we have so far beset ourselves with rules, and
concepts, and ideas...that we have become afraid of
what will happen naturally, and convinced that we must
work within a “system” and with “methods” [or] our
surroundings will come tumbling down in chaos.”
Christopher Alexander - “The Timeless Way of Building”
@cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
9
We turn to our UML and architecture diagrams and design documents, trying to brute force a
system that will work, afraid that if we don’t - chaos. But nature *dictates* an iterative design
- one where the best path is not only discovered, but continually chosen. We literally can not
build software any other way.
22. @cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
10
This is a map of the Mississippi River in the United States. What’s special about it is that it is all of the routes the
river has run through the years. We create a design. We settle down, build a house, have a family. But the code
doesn't want that. It has plans beyond our design. And if we don't listen to those plans, our days will become filled
with holding off the impending - and inevitable - change (http://www.adammandelman.net/tag/harold-fisk/)
23. @cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
11
For example, in 2011, the Mississippi River tried to change course, I believe to the Orange
area. And it normally would have - except for the millions of dollars the Army Corp of
Engineers spent to erect dams, flood farm fields and otherwise keep it on the course best for
us - not for it. But trying to brute force design into nature’s iterative process isn’t the only
problem. (10k next)
24. @cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
12
There’s a common figure that is given to developers about what it takes to become great in
software. Does anyone know that number? <Click> This is the number of hours to “master” a
skill. But as much as we tout this, we don’t really act like this is important. People new to
software either get this
25. Ten Thousand Hours
@cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
12
There’s a common figure that is given to developers about what it takes to become great in
software. Does anyone know that number? <Click> This is the number of hours to “master” a
skill. But as much as we tout this, we don’t really act like this is important. People new to
software either get this
27. @cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Empty promises! (Beaker story). Can you imagine learning C++ in 24 hours? Well, you might
be able to learn syntax, but building great software isn’t just about learning syntax. Or
diagrams. At the start of the talk, I quoted Alexander talking about a Timeless Way of
Building - and that this way - this timeless way - is the only way buildings - or software that are alive can be built. And if we go right to the kernel of that way, he says
14
28. @cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Empty promises! (Beaker story). Can you imagine learning C++ in 24 hours? Well, you might
be able to learn syntax, but building great software isn’t just about learning syntax. Or
diagrams. At the start of the talk, I quoted Alexander talking about a Timeless Way of
Building - and that this way - this timeless way - is the only way buildings - or software that are alive can be built. And if we go right to the kernel of that way, he says
14
29. @cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Empty promises! (Beaker story). Can you imagine learning C++ in 24 hours? Well, you might
be able to learn syntax, but building great software isn’t just about learning syntax. Or
diagrams. At the start of the talk, I quoted Alexander talking about a Timeless Way of
Building - and that this way - this timeless way - is the only way buildings - or software that are alive can be built. And if we go right to the kernel of that way, he says
14
30. @cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Empty promises! (Beaker story). Can you imagine learning C++ in 24 hours? Well, you might
be able to learn syntax, but building great software isn’t just about learning syntax. Or
diagrams. At the start of the talk, I quoted Alexander talking about a Timeless Way of
Building - and that this way - this timeless way - is the only way buildings - or software that are alive can be built. And if we go right to the kernel of that way, he says
14
31. “To make a building {alive}...the
builder must let go of all his
willful images, and start with a
void...At this stage the building’s
life will come directly from your
language”
Christopher Alexander - “The Timeless Way of Building”
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
So for us to be able to build great software, we have to be willing to let go of the diagrams.
Of the syntax. Of the “Point A, Point B, flow”. And let go of the fear
15
32. “You are able to do this only
when you no longer fear that
nothing will happen”
Christopher Alexander - “The Timeless Way of Building”
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
of the fear that if we let go, nothing will happen. Or chaos will happen. So, how do we get to
the point where we feel comfortable enough to let go. And, more importantly, how do we
teach others to get to that point? I think that the way that we do that is by recognizing that
the heart of programming isn’t code, but communication. That’s why we call them
programming languages. And we can learn a lot from how people learn languages to help us
along our ten thousand hour path to get to the point where we can build alive systems by
letting go
16
33. Imperative Programming
Functional Programming
Logic Programming
Dynamic Typing
Static Typing
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
This first is the understanding of how languages/paradigms affect our viewpoints. Roman
Jakobson points out “Languages differ...must convey vs what they may convey”. “dinner with
a neighbor last night”, doesn’t reveal if it was a male or female. But if I said in German, I
would be obliged to (Nachbar vs Nachbarin). Functional: context of reduction of terms.
Imperative: statement of the process, and logic: statement of the result. Static: abstractions
sooner, dynamic: abstraction to be held off
17
34. Coding Standards Define Dialects
@cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
18
The second is that even within languages we have dialects. We have to agree on what that
common dialect is going to be. This is traditionally the essence of coding standards - what is
our agreed upon dialect?
35. Coding Standards Define Dialects
@cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
18
The second is that even within languages we have dialects. We have to agree on what that
common dialect is going to be. This is traditionally the essence of coding standards - what is
our agreed upon dialect?
36. Coding Standards Define Dialects
@cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
18
The second is that even within languages we have dialects. We have to agree on what that
common dialect is going to be. This is traditionally the essence of coding standards - what is
our agreed upon dialect?
37. BICS
CALP
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
The third is that the way we approach and learn languages is somewhat haphazard. You only
need to look at any programming language book to see they all do them differently. But the
process of learning a natural language is well known, and standardized regardless of the
language. We can apply a similar framework to develop the skills we need to listen and
understand our code
19
38. BICS
CALP
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
The third is that the way we approach and learn languages is somewhat haphazard. You only
need to look at any programming language book to see they all do them differently. But the
process of learning a natural language is well known, and standardized regardless of the
language. We can apply a similar framework to develop the skills we need to listen and
understand our code
19
39. BICS
Context
Embedded
Context
Reduced
CALP
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
The third is that the way we approach and learn languages is somewhat haphazard. You only
need to look at any programming language book to see they all do them differently. But the
process of learning a natural language is well known, and standardized regardless of the
language. We can apply a similar framework to develop the skills we need to listen and
understand our code
19
40. Cognitively Undemanding
- Copying from the board
- Reading a Map
- Face to Face Conversation
- Selecting food in the
lunchroom
BICS
Context
Embedded
Context
Reduced
CALP
@cory_foy
Cognitively Demanding
foyc@coryfoy.com
Thursday, November 14, 13
The third is that the way we approach and learn languages is somewhat haphazard. You only
need to look at any programming language book to see they all do them differently. But the
process of learning a natural language is well known, and standardized regardless of the
language. We can apply a similar framework to develop the skills we need to listen and
understand our code
19
41. Cognitively Undemanding
- Copying from the board
- Reading a Map
- Face to Face Conversation
- Selecting food in the
lunchroom
BICS
- Following a class schedule
- Telephone Conversation
- Oral Presentations
- Getting an absence excuse
Context
Embedded
Context
Reduced
CALP
@cory_foy
Cognitively Demanding
foyc@coryfoy.com
Thursday, November 14, 13
The third is that the way we approach and learn languages is somewhat haphazard. You only
need to look at any programming language book to see they all do them differently. But the
process of learning a natural language is well known, and standardized regardless of the
language. We can apply a similar framework to develop the skills we need to listen and
understand our code
19
42. Cognitively Undemanding
- Copying from the board
- Reading a Map
- Face to Face Conversation
- Selecting food in the
lunchroom
BICS
- Following a class schedule
- Telephone Conversation
- Oral Presentations
- Getting an absence excuse
Context
Embedded
Context
Reduced
- Demonstrations
- Basic Math
Computations
- Science Experiments
CALP
@cory_foy
Cognitively Demanding
foyc@coryfoy.com
Thursday, November 14, 13
The third is that the way we approach and learn languages is somewhat haphazard. You only
need to look at any programming language book to see they all do them differently. But the
process of learning a natural language is well known, and standardized regardless of the
language. We can apply a similar framework to develop the skills we need to listen and
understand our code
19
43. Cognitively Undemanding
- Copying from the board
- Reading a Map
- Face to Face Conversation
- Selecting food in the
lunchroom
BICS
- Following a class schedule
- Telephone Conversation
- Oral Presentations
- Getting an absence excuse
Context
Embedded
Context
Reduced
- Demonstrations
- Basic Math
Computations
- Science Experiments
- Standardized Tests
- Math Concepts and
Applications
- Listening to a Lecture
CALP
@cory_foy
Cognitively Demanding
foyc@coryfoy.com
Thursday, November 14, 13
The third is that the way we approach and learn languages is somewhat haphazard. You only
need to look at any programming language book to see they all do them differently. But the
process of learning a natural language is well known, and standardized regardless of the
language. We can apply a similar framework to develop the skills we need to listen and
understand our code
19
44. Cognitively Undemanding
BICS
Context
Embedded
Context
Reduced
CALP
@cory_foy
Cognitively Demanding
foyc@coryfoy.com
Thursday, November 14, 13
This framework, which I’m calling the “Foy-Z” model (with great irreverence), looks like this.
We need to start by providing context. Katas provide a container to operate with in. Koans
provide language specific nuances. Principles help us analyze our code in a higher context
way, while patterns forces us to think about our overall goals. So let’s look at these a little
more.
20
45. Foy-Z
Cognitively Undemanding
BICS
Context
Embedded
Context
Reduced
CALP
@cory_foy
Cognitively Demanding
foyc@coryfoy.com
Thursday, November 14, 13
This framework, which I’m calling the “Foy-Z” model (with great irreverence), looks like this.
We need to start by providing context. Katas provide a container to operate with in. Koans
provide language specific nuances. Principles help us analyze our code in a higher context
way, while patterns forces us to think about our overall goals. So let’s look at these a little
more.
20
50. Katas
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Let’s start with Katas. First described in the software world by Pragmatic Dave Thomas, they
offer the ability to practice without the solution being the cognitive challenge. In short, they
allow developers to practice varying externally motivated viewpoints.
21
51. Conway’s Game of Life
- Infinite Grid of Cells
- Each Cell has two states - alive or dead
- Interacts with neighbors in a well known way
http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life
@cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
22
52. Conway’s Game of Life
- Infinite Grid of Cells
- Each Cell has two states - alive or dead
- Interacts with neighbors in a well known way
http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life
@cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
22
53. Conway’s Game of Life
- Infinite Grid of Cells
- Each Cell has two states - alive or dead
- Interacts with neighbors in a well known way
http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life
@cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
22
54. Conway’s Game of Life
- Infinite Grid of Cells
- Each Cell has two states - alive or dead
- Interacts with neighbors in a well known way
http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life
@cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
22
55. Conway’s Game of Life - If Statement
@cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
23
56. Conway’s Game of Life - If Statement
@cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
23
57. Conway’s Game of Life - No Conditional
@cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
24
60. Koans
@cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
26
Koans come in. Koans provide language-specific nuances - the grammar if you will. They
tend to be language specific, but lower context. It’s like practicing nouns and verbs - great to
do, but much better if you have some context to put them in. For example (next Edgecase
Koans)
70. SOLID Principles
Do we have
duplication
(implementation or
conceptual)?
Single
responsibilities?
LoD violations?
LSP violations?
@cory_foy
Thursday, November 14, 13
Transition to patterns
foyc@coryfoy.com
34
71. 4 Rules of Simple Design
Does this code express all of the ideas
we want to express?
@cory_foy
Thursday, November 14, 13
Patterns. 4 Rules of Simple Design. Fowler. SOLID
foyc@coryfoy.com
35
72. 4 Rules of Simple Design
Does this code express all of the ideas
we want to express?
@cory_foy
Thursday, November 14, 13
Patterns. 4 Rules of Simple Design. Fowler. SOLID
foyc@coryfoy.com
35
73. 4 Rules of Simple Design
Does this code express all of the ideas
we want to express?
@cory_foy
Thursday, November 14, 13
Patterns. 4 Rules of Simple Design. Fowler. SOLID
foyc@coryfoy.com
35
74. 4 Rules of Simple Design
Does this code express all of the ideas
we want to express?
Are there concepts from our domain that can be
expressed?
@cory_foy
Thursday, November 14, 13
Patterns. 4 Rules of Simple Design. Fowler. SOLID
foyc@coryfoy.com
35
75. 4 Rules of Simple Design
Does this code express all of the ideas
we want to express?
Are there concepts from our domain that can be
expressed?
@cory_foy
Thursday, November 14, 13
Patterns. 4 Rules of Simple Design. Fowler. SOLID
foyc@coryfoy.com
35
76. Fowler’s Perspectives (from UML Distilled)
Are we operating at
the right level Conceptual,
Specification or
Implementation?
@cory_foy
Thursday, November 14, 13
Patterns. 4 Rules of Simple Design. Fowler. SOLID
foyc@coryfoy.com
36
77. Fowler’s Perspectives (from UML Distilled)
Are we operating at
the right level Conceptual,
Specification or
Implementation?
@cory_foy
Thursday, November 14, 13
Patterns. 4 Rules of Simple Design. Fowler. SOLID
foyc@coryfoy.com
36
80. Patterns
@cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
38
Design Patterns provide a guide for the forces encountered. What does that mean? We have a
tendency to think of Design Patterns as recipes to make our code look a certain way. But
82. Naming something the name of a pattern
does not make it that pattern
@cory_foy
Thursday, November 14, 13
Patterns are something else.
foyc@coryfoy.com
39
83. Naming something the name of a pattern
does not make it that pattern
Putting patterns in our code does not
make our code good
@cory_foy
Thursday, November 14, 13
Patterns are something else.
foyc@coryfoy.com
39
90. • Pattern Name
• Intent
• Also Known As
• Motivation / Forces
• Applicability
• Structure
• Participants
• Collaboration
• Consequences
• Implementation
• Sample Code
• Known Uses
• Related Patterns
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
The GoF Book wasn’t a beginners guide. It was Erich’s PhD Thesis. Patterns are designed to
put into form the forces you may run into while building code. What does that mean?
43
91. Server
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Let’s imagine a mobile application to upload pictures. So what forces are at play here? We
know we have to associate multiple pictures to data. Data can have new types added, which
need to be available on all other phones. The phone needs to be able to send the pictures to
the server, as well as send and receive data updates. And deal with offline conditions.
44
92. - Countries
- Products
- Locations
Server
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Let’s imagine a mobile application to upload pictures. So what forces are at play here? We
know we have to associate multiple pictures to data. Data can have new types added, which
need to be available on all other phones. The phone needs to be able to send the pictures to
the server, as well as send and receive data updates. And deal with offline conditions.
44
93. - Countries
- Products
- Locations
- Send Data
- Receive Data
Server
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Let’s imagine a mobile application to upload pictures. So what forces are at play here? We
know we have to associate multiple pictures to data. Data can have new types added, which
need to be available on all other phones. The phone needs to be able to send the pictures to
the server, as well as send and receive data updates. And deal with offline conditions.
44
94. Multiple
Pictures
- Countries
- Products
- Locations
- Send Data
- Receive Data
Server
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Let’s imagine a mobile application to upload pictures. So what forces are at play here? We
know we have to associate multiple pictures to data. Data can have new types added, which
need to be available on all other phones. The phone needs to be able to send the pictures to
the server, as well as send and receive data updates. And deal with offline conditions.
44
95. Multiple
Pictures
- Countries
- Products
- Locations
Send
Pictures
- Send Data
- Receive Data
Server
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Let’s imagine a mobile application to upload pictures. So what forces are at play here? We
know we have to associate multiple pictures to data. Data can have new types added, which
need to be available on all other phones. The phone needs to be able to send the pictures to
the server, as well as send and receive data updates. And deal with offline conditions.
44
96. Multiple
Pictures
- Countries
- Products
- Locations
Send
Pictures
- Send Data
- Receive Data
Server
@cory_foy
Storage Options
foyc@coryfoy.com
Thursday, November 14, 13
Let’s imagine a mobile application to upload pictures. So what forces are at play here? We
know we have to associate multiple pictures to data. Data can have new types added, which
need to be available on all other phones. The phone needs to be able to send the pictures to
the server, as well as send and receive data updates. And deal with offline conditions.
44
97. Offline
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
One way is by knowing the forces at play and comparing them to previous events. For
example, the phone (or server) could be offline. What can we do if we are offline?
45
98. Offline
Not allow send
@cory_foy
Queue items to send
foyc@coryfoy.com
Thursday, November 14, 13
One way is by knowing the forces at play and comparing them to previous events. For
example, the phone (or server) could be offline. What can we do if we are offline?
45
99. Offline
Not allow send
Automatically
@cory_foy
Queue items to send
Manually
foyc@coryfoy.com
Thursday, November 14, 13
One way is by knowing the forces at play and comparing them to previous events. For
example, the phone (or server) could be offline. What can we do if we are offline?
45
100. Offline
Not allow send
Automatically
Queue items to send
Manually
Forces:
- User has to remember to
send
- User can’t do other tasks
until sent
- User has to send each one
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
One way is by knowing the forces at play and comparing them to previous events. For
example, the phone (or server) could be offline. What can we do if we are offline?
45
101. Offline
Not allow send
Automatically
Forces:
- Store multiple requests
- Schedule to run them
- Handle failed requests
- Allow user to see
status
@cory_foy
Queue items to send
Manually
Forces:
- User has to remember to
send
- User can’t do other tasks
until sent
- User has to send each one
foyc@coryfoy.com
Thursday, November 14, 13
One way is by knowing the forces at play and comparing them to previous events. For
example, the phone (or server) could be offline. What can we do if we are offline?
45
106. We don’t
understand the
language
We don’t have
common context
@cory_foy
Thursday, November 14, 13
we’ve begun addressing some of the key issues in being able to listen to it.
foyc@coryfoy.com
48
107. We don’t
understand the
language
We don’t have
common context
We don’t know
the grammar
@cory_foy
Thursday, November 14, 13
we’ve begun addressing some of the key issues in being able to listen to it.
foyc@coryfoy.com
48
108. We don’t
understand the
language
We don’t have
common context
We don’t know
the grammar
We don’t know
how to apply the
grammar
@cory_foy
Thursday, November 14, 13
we’ve begun addressing some of the key issues in being able to listen to it.
foyc@coryfoy.com
48
109. We don’t
understand the
language
We don’t have
common context
We don’t know
how to apply the
grammar
We don’t know
the grammar
We don’t know
what’s
appropriate
@cory_foy
Thursday, November 14, 13
we’ve begun addressing some of the key issues in being able to listen to it.
foyc@coryfoy.com
48
110. http://www.flickr.com/photos/jakeandlindsay/5524669257
@cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
49
So how to we apply it? How do we use that to now let go? First, diagrams aren’t bad. There’s
nothing wrong with sketching out a plan. But, “No plan survives first contact with the enemy”.
So pay attention to the forces more than the plan.
111. http://www.soapatterns.org/asynchronous_queuing.php
@cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
50
For example, looking at this pattern again, notice the impacts. We may say to ourselves, we
want an Aysnc Queue, so fine, be on the lookout for that. But don’t blindly just shove an
async queue in. Watch for your code to tell you it needs it. (This also applies to databases and
many other things we “Know we need”)
112. http://marchoeijmans.blogspot.com/2013/03/test-driven-development-tdd.html
(Although I disagree with the article)
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Second: If you haven’t done TDD, or aren’t doing it, I’d highly recommend spending some
time with Katas trying it out. What I find powerful is that it makes no qualms about your
design. Don’t write a design, and then write tests to prove you are writing your design. Let
the tests guide you. See what design emerges from them.
51
113. @cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Third: Technical Vision. In a team environment, you want to make sure you all are on the
same page. Traditionally we’ve built software bottom up. But this doesn’t give us an
opportunity to learn. “Tracer Bullets”
52
114. Database
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Third: Technical Vision. In a team environment, you want to make sure you all are on the
same page. Traditionally we’ve built software bottom up. But this doesn’t give us an
opportunity to learn. “Tracer Bullets”
52
115. Stored Procedures
Database
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Third: Technical Vision. In a team environment, you want to make sure you all are on the
same page. Traditionally we’ve built software bottom up. But this doesn’t give us an
opportunity to learn. “Tracer Bullets”
52
116. Service Layer
Stored Procedures
Database
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Third: Technical Vision. In a team environment, you want to make sure you all are on the
same page. Traditionally we’ve built software bottom up. But this doesn’t give us an
opportunity to learn. “Tracer Bullets”
52
117. API Layer
Service Layer
Stored Procedures
Database
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Third: Technical Vision. In a team environment, you want to make sure you all are on the
same page. Traditionally we’ve built software bottom up. But this doesn’t give us an
opportunity to learn. “Tracer Bullets”
52
118. Front End Layer
API Layer
Service Layer
Stored Procedures
Database
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Third: Technical Vision. In a team environment, you want to make sure you all are on the
same page. Traditionally we’ve built software bottom up. But this doesn’t give us an
opportunity to learn. “Tracer Bullets”
52
119. Front End Layer
API Layer
Service Layer
Stored Procedures
Database
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Third: Technical Vision. In a team environment, you want to make sure you all are on the
same page. Traditionally we’ve built software bottom up. But this doesn’t give us an
opportunity to learn. “Tracer Bullets”
52
120. Front End Layer
API Layer
Service Layer
Stored Procedures
Database
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Third: Technical Vision. In a team environment, you want to make sure you all are on the
same page. Traditionally we’ve built software bottom up. But this doesn’t give us an
opportunity to learn. “Tracer Bullets”
52
121. Front End Layer
API Layer
Service Layer
Stored Procedures
Database
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Third: Technical Vision. In a team environment, you want to make sure you all are on the
same page. Traditionally we’ve built software bottom up. But this doesn’t give us an
opportunity to learn. “Tracer Bullets”
52
122. Front End Layer
API Layer
Service Layer
Stored Procedures
Database
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Third: Technical Vision. In a team environment, you want to make sure you all are on the
same page. Traditionally we’ve built software bottom up. But this doesn’t give us an
opportunity to learn. “Tracer Bullets”
52
123. Front End Layer
API Layer
Service Layer
Stored Procedures
Database
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
Third: Technical Vision. In a team environment, you want to make sure you all are on the
same page. Traditionally we’ve built software bottom up. But this doesn’t give us an
opportunity to learn. “Tracer Bullets”
52
124. Front End Layer
API Layer
Service Layer
Stored Procedures
Database
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
There’s nothing wrong with a vision. And as you work on slices, you can check against the
overall vision to see if you are on the path you expected, or if your vision needs to change.
Not the code, but the vision.
53
125. Vision
Front End Layer
API Layer
Service Layer
Stored Procedures
Database
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
There’s nothing wrong with a vision. And as you work on slices, you can check against the
overall vision to see if you are on the path you expected, or if your vision needs to change.
Not the code, but the vision.
53
126. Vision
Front End Layer
API Layer
Service Layer
Stored Procedures
Database
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
There’s nothing wrong with a vision. And as you work on slices, you can check against the
overall vision to see if you are on the path you expected, or if your vision needs to change.
Not the code, but the vision.
53
127. Vision
Front End Layer
API Layer
Service Layer
Stored Procedures
Database
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
There’s nothing wrong with a vision. And as you work on slices, you can check against the
overall vision to see if you are on the path you expected, or if your vision needs to change.
Not the code, but the vision.
53
128. Pay attention to the forces
Let the code (and tests!) guide your design
Develop a vision, but use it as a guide, not a whipping post
@cory_foy
Thursday, November 14, 13
foyc@coryfoy.com
54
These things together, along with the solid understanding of the different paradigms and
approaches are going to get you to the point where you can let go of the “willful images” and
start really listening to your code. And when you listen to your code
129. @cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
you end up with happy code. And when you don’t, you end up with unhappy code, baffled at
why you are even bothering to build it if you aren’t going to listen.
55
133. if coder_listens?
puts “:-)”
else
puts “:`-(“
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
you end up with happy code. And when you don’t, you end up with unhappy code, baffled at
why you are even bothering to build it if you aren’t going to listen.
55
134. if coder_listens?
puts “:-)”
else
puts “:`-(“
end
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
you end up with happy code. And when you don’t, you end up with unhappy code, baffled at
why you are even bothering to build it if you aren’t going to listen.
55
135. if coder_listens?
puts “:-)”
else
puts “:`-(“
end
@cory_foy
foyc@coryfoy.com
Thursday, November 14, 13
you end up with happy code. And when you don’t, you end up with unhappy code, baffled at
why you are even bothering to build it if you aren’t going to listen.
55