Files
nexus/sreweekly/articles/90/10-what-s-in-a-transport-layer.html
2026-09-12 17:23:01 +08:00

1954 lines
250 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html><html
lang=en-US><head><meta
charset="UTF-8"><title>
What&#8217;s in a transport layer? – O’Reilly</title><meta
name='robots' content='max-image-preview:large'><style id=wp-img-auto-sizes-contain-inline-css>img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
/*# sourceURL=wp-img-auto-sizes-contain-inline-css */</style><style id=wp-emoji-styles-inline-css>img.wp-smiley, img.emoji {
display: inline !important;
border: none !important;
box-shadow: none !important;
height: 1em !important;
width: 1em !important;
margin: 0 0.07em !important;
vertical-align: -0.1em !important;
background: none !important;
padding: 0 !important;
}
/*# sourceURL=wp-emoji-styles-inline-css */</style><style id=wp-block-library-inline-css>/*<![CDATA[*/:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
/*# sourceURL=/wp-includes/css/dist/block-library/common.min.css *//*]]>*/</style><style id=classic-theme-styles-inline-css>/*! This file is auto-generated */
.wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none}
/*# sourceURL=/wp-includes/css/classic-themes.min.css */</style><style id=global-styles-inline-css>/*<![CDATA[*/:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}
/*# sourceURL=global-styles-inline-css *//*]]>*/</style><link
rel=stylesheet id=mytheme-style-css href='https://www.oreilly.com/content/wp-content/themes/signal/style.css?ver=1787760808' media=all> <script src=https://www.oreilly.com/content/wp-content/cache/minify/2/2b57e.js></script> <link
rel=canonical href=https://www.oreilly.com/content/whats-in-a-transport-layer/ ><link
rel=shortlink href='https://www.oreilly.com/content/?p=3768'><link
rel=alternate type=application/rss+xml title="Podcast RSS feed" href=https://www.oreilly.com/content/feed/podcast><link
rel=icon href=https://www.oreilly.com/content/wp-content/uploads/sites/2/2025/04/cropped-favicon_512x512-32x32.png sizes=32x32><link
rel=icon href=https://www.oreilly.com/content/wp-content/uploads/sites/2/2025/04/cropped-favicon_512x512-192x192.png sizes=192x192><link
rel=apple-touch-icon href=https://www.oreilly.com/content/wp-content/uploads/sites/2/2025/04/cropped-favicon_512x512-180x180.png><meta
name="msapplication-TileImage" content="https://www.oreilly.com/content/wp-content/uploads/sites/2/2025/04/cropped-favicon_512x512-270x270.png"><meta
http-equiv="X-UA-Compatible" content="IE=edge"><meta
name="viewport" content="width=device-width, initial-scale=1"><meta
name="language_name" content="English"><meta
name="native_language_name" content="English"><meta
name="format-detection" content="telephone=no"><link
rel=icon type=image/png href=//www.oreilly.com/favicon.ico><!--[if lte IE 9]> <script>'article aside footer header main nav section time'.replace(/\w+/g,function(n){document.createElement(n)})</script> <![endif]--><!--[if IE 9]><style>#menu-toggle:checked ~ .mobile-nav { display:block; }
.mobile-nav { display: none; }</style><![endif]--><meta
property="twitter:card" content="summary_large_image"><meta
property="twitter:site" content="@OReillyMedia"><meta
property="twitter:title" content="What&#039;s in a transport layer?"><meta
property="twitter:description" content="Understanding gRPC in the dawn of microservices."><meta
property="twitter:url" content="https://www.oreilly.com/content/whats-in-a-transport-layer"><meta
property="twitter:image" content="https://www.oreilly.com/content/wp-content/uploads/sites/2/2020/01/traffic-light-2681107_1920-3ea5a0b7151a35eb14612c78c9ff761c-1024x683.jpg"><meta
property="og:type" content="article"><meta
property="og:site_name" content="O’Reilly Media"><meta
property="og:title" content="What&#039;s in a transport layer?"><meta
property="og:description" content="Understanding gRPC in the dawn of microservices."><meta
property="og:url" content="https://www.oreilly.com/content/whats-in-a-transport-layer/"><meta
property="og:image" content="https://www.oreilly.com/content/wp-content/uploads/sites/2/2020/01/traffic-light-2681107_1920-3ea5a0b7151a35eb14612c78c9ff761c-1024x683.jpg"><meta
name="description" content="Understanding gRPC in the dawn of microservices."><meta
name="author" content="Nathan LeClaire"><meta
name="description:site" content="Understanding gRPC in the dawn of microservices."><meta
property="article:published_time" content="2017-09-19T06:00:00-04:00"><meta
name="article:author" content="Nathan LeClaire"><meta
name="date" content="2017-09-19"><meta
name="thumbnail" content="https://www.oreilly.com/content/wp-content/uploads/sites/2/2020/01/traffic-light-2681107_1920-3ea5a0b7151a35eb14612c78c9ff761c-1024x683.jpg"><meta
name="graphic_medium" content="https://www.oreilly.com/content/wp-content/uploads/sites/2/2020/01/traffic-light-2681107_1920-3ea5a0b7151a35eb14612c78c9ff761c-1024x683.jpg"><meta
name="oreilly:content_type" content="text"> <script>loggedInObject = new Object();
var dataLayer = window.dataLayer || [];
//Check for O'Reilly Unified logged-in status
if (document.cookie.split(';').filter(function(item) {
return item.indexOf('orm-jwt=') >= 0;
}).length) {
loggedInObject.loggedIn = 'yes';
dataLayer.push(loggedInObject);
//Add 'loggedIn class to html tag
const htmlTag = document.querySelector('html');
if (htmlTag !== null) {
htmlTag.classList.add('loggedIn');
}
}</script> <script>dataLayer = [{"content.author":"Nathan LeClaire","content.formatType":"article","content.free":"yes","content.identifier":"none","content.parentTopic":"none","content.publisher":"O'Reilly Media Inc.","content.releaseDate":"2017-09-19","content.subTopic":"none","content.subdirectory":"content","content.title":"What&#039;s in a transport layer?","product.identifier":"none","product.title":"none","product.type":"none"}];</script> <script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-5P4V6Z');</script> <link
rel=preconnect href=https://dev.visualwebsiteoptimizer.com> <script id=vwoCode>window._vwo_code || (function() {
var account_id=27087,
version=2.1,
settings_tolerance=2000,
hide_element='body',
hide_element_style = 'opacity:0 !important;filter:alpha(opacity=0) !important;background:none !important',
/* DO NOT EDIT BELOW THIS LINE */
f=false,w=window,d=document,v=d.querySelector('#vwoCode'),cK='_vwo_'+account_id+'_settings',cc={};try{var c=JSON.parse(localStorage.getItem('_vwo_'+account_id+'_config'));cc=c&&typeof c==='object'?c:{}}catch(e){}var stT=cc.stT==='session'?w.sessionStorage:w.localStorage;code={use_existing_jquery:function(){return typeof use_existing_jquery!=='undefined'?use_existing_jquery:undefined},library_tolerance:function(){return typeof library_tolerance!=='undefined'?library_tolerance:undefined},settings_tolerance:function(){return cc.sT||settings_tolerance},hide_element_style:function(){return'{'+(cc.hES||hide_element_style)+'}'},hide_element:function(){if(performance.getEntriesByName('first-contentful-paint')[0]){return''}return typeof cc.hE==='string'?cc.hE:hide_element},getVersion:function(){return version},finish:function(e){if(!f){f=true;var t=d.getElementById('_vis_opt_path_hides');if(t)t.parentNode.removeChild(t);if(e)(new Image).src='https://dev.visualwebsiteoptimizer.com/ee.gif?a='+account_id+e}},finished:function(){return f},addScript:function(e){var t=d.createElement('script');t.type='text/javascript';if(e.src){t.src=e.src}else{t.text=e.text}d.getElementsByTagName('head')[0].appendChild(t)},load:function(e,t){var i=this.getSettings(),n=d.createElement('script'),r=this;t=t||{};if(i){n.textContent=i;d.getElementsByTagName('head')[0].appendChild(n);if(!w.VWO||VWO.caE){stT.removeItem(cK);r.load(e)}}else{var o=new XMLHttpRequest;o.open('GET',e,true);o.withCredentials=!t.dSC;o.responseType=t.responseType||'text';o.onload=function(){if(t.onloadCb){return t.onloadCb(o,e)}if(o.status===200){_vwo_code.addScript({text:o.responseText})}else{_vwo_code.finish('&e=loading_failure:'+e)}};o.onerror=function(){if(t.onerrorCb){return t.onerrorCb(e)}_vwo_code.finish('&e=loading_failure:'+e)};o.send()}},getSettings:function(){try{var e=stT.getItem(cK);if(!e){return}e=JSON.parse(e);if(Date.now()>e.e){stT.removeItem(cK);return}return e.s}catch(e){return}},init:function(){if(d.URL.indexOf('__vwo_disable__')>-1)return;var e=this.settings_tolerance();w._vwo_settings_timer=setTimeout(function(){_vwo_code.finish();stT.removeItem(cK)},e);var t;if(this.hide_element()!=='body'){t=d.createElement('style');var i=this.hide_element(),n=i?i+this.hide_element_style():'',r=d.getElementsByTagName('head')[0];t.setAttribute('id','_vis_opt_path_hides');v&&t.setAttribute('nonce',v.nonce);t.setAttribute('type','text/css');if(t.styleSheet)t.styleSheet.cssText=n;else t.appendChild(d.createTextNode(n));r.appendChild(t)}else{t=d.getElementsByTagName('head')[0];var n=d.createElement('div');n.style.cssText='z-index: 2147483647 !important;position: fixed !important;left: 0 !important;top: 0 !important;width: 100% !important;height: 100% !important;background: white !important;';n.setAttribute('id','_vis_opt_path_hides');n.classList.add('_vis_hide_layer');t.parentNode.insertBefore(n,t.nextSibling)}var o='https://dev.visualwebsiteoptimizer.com/j.php?a='+account_id+'&u='+encodeURIComponent(d.URL)+'&vn='+version;if(w.location.search.indexOf('_vwo_xhr')!==-1){this.addScript({src:o})}else{this.load(o+'&x=true')}}};w._vwo_code=code;code.init();})();</script> <script type=application/ld+json>{
"@context": "https://schema.org",
"@type": "BreadcrumbList",
"itemListElement": [
{
"@type": "ListItem",
"position": 1,
"name": "O'Reilly",
"item": "https://www.oreilly.com/"
},
{
"@type": "ListItem",
"position": 2,
"name": "Radar",
"item": "https://www.oreilly.com/radar/"
},
{
"@type": "ListItem",
"position": 3,
"name": "What&#8217;s in a transport layer?",
"item": "https://www.oreilly.com/content/whats-in-a-transport-layer/"
}
]
}</script> </head><body
class="wp-singular post-template-default single single-post postid-3768 single-format-standard wp-theme-signal multisite-content"><noscript><iframe
src="https://www.googletagmanager.com/ns.html?id=GTM-5P4V6Z" height=0 width=0 style=display:none;visibility:hidden></iframe></noscript><a
class=skipToMain id=skipToMain href=#maincontent>Skip to main content</a><header
class=orm-global-site-header--auth id=orm-global-site-banner role=banner data-testid=site-header-auth><nav
id=orm-global-marketing-nav data-hidden=sm><ul
id=orm-global-marketing-nav__list role=menu>
<li
class=orm-global-marketing-nav-list__item role=presentation><a
class=orm-global-marketing-nav-list-item__link role=menuitem data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"for enterprise" }' data-gtm-event=mousedown href=https://www.oreilly.com/online-learning/teams.html>For Enterprise</a></li><li
class=orm-global-marketing-nav-list__item role=presentation><a
class=orm-global-marketing-nav-list-item__link role=menuitem data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"for government" }' data-gtm-event=mousedown href=https://www.oreilly.com/online-learning/government.html>For Government</a></li><li
class=orm-global-marketing-nav-list__item role=presentation><a
class=orm-global-marketing-nav-list-item__link role=menuitem data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"for higher ed" }' data-gtm-event=mousedown href=https://www.oreilly.com/online-learning/academic.html>For Higher Ed</a></li><li
class=orm-global-marketing-nav-list__item role=presentation><a
class=orm-global-marketing-nav-list-item__link role=menuitem data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"for individuals" }' data-gtm-event=mousedown href=https://www.oreilly.com/online-learning/individuals.html>For Individuals</a></li><li
class=orm-global-marketing-nav-list__item role=presentation><a
class=orm-global-marketing-nav-list-item__link role=menuitem data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"for content marketing" }' data-gtm-event=mousedown href=https://www.oreilly.com/content-marketing-solutions.html>For Content Marketing</a></li></ul></nav><div
id=orm-global-site-banner__content><div
class=orm-global-site-banner__block>
<button
aria-expanded=false class=orm-global-mobile-toggle data-mobile-toggle=true data-testid=navigation-toggle id=orm-global-site-menu-toggle aria-label="Toggle site menu" aria-controls=orm-global-mobile-pane--navigation>
<svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 16 16" fill=none stroke=var(--orm-modern-dark) data-closed-icon=true>
<path
d="M1 3H15M1 8H15M1 13H15" stroke-width=2 stroke-linecap=round></path>
</svg>
<svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 8 8" fill=none data-open-icon=true>
<path
fill-rule=evenodd clip-rule=evenodd d="M0.948112 0C0.408563 0 4.11814e-06 0.431923 4.11814e-06 0.95467C4.11814e-06 1.22411 0.111261 1.45183 0.267234 1.61743L2.58966 4.00047L0.27598 6.37752C0.108619 6.54684 0 6.77982 0 7.04533C0 7.56808 0.408558 8 0.948108 8C1.20588 8 1.43872 7.89659 1.60824 7.73661L1.61715 7.7282L3.99833 5.28676L6.37456 7.71975L6.37891 7.72411C6.5552 7.90088 6.79692 8 7.05189 8C7.59144 8 8 7.56808 8 7.04533C8 6.77589 7.88874 6.54817 7.73277 6.38257L5.41034 3.99953L7.72402 1.62247C7.89138 1.45316 8 1.22017 8 0.95467C8 0.431923 7.59144 0 7.05189 0C6.79412 0 6.56126 0.10342 6.39175 0.263408L6.38285 0.27181L4.00167 2.71324L1.62544 0.280255L1.62109 0.275892C1.4448 0.099117 1.20308 0 0.948112 0Z" fill=var(--orm-modern-r500)></path>
</svg>
</button>
<a
id=orm-global-site-logo-link href=https://www.oreilly.com title="home page" aria-current=page>
<svg
id=orm-global-site-logo viewBox="0 0 137 26" fill=none xmlns=http://www.w3.org/2000/svg>
<path
fill-rule=evenodd clip-rule=evenodd d="M27.2625 6.503C28.875 6.503 30.1875 5.17607 30.1875 3.54584C30.1875 1.91561 28.9125 0.626596 27.2625 0.588684C25.65 0.588684 24.3375 1.91561 24.3375 3.54584C24.3375 5.17607 25.65 6.503 27.2625 6.503ZM3.9375 13.1376C3.9375 10.7871 4.875 8.66399 6.4125 7.10958C7.95 5.55518 10.0125 4.60737 12.3375 4.60737C14.6625 4.60737 16.7625 5.55518 18.3 7.10958C19.8375 8.66399 20.775 10.7871 20.775 13.1376C20.775 15.4882 19.8375 17.5734 18.3375 19.1657C16.8 20.7201 14.7 21.6679 12.375 21.6679C10.05 21.6679 7.95 20.7201 6.4125 19.1657C4.875 17.6113 3.9375 15.4882 3.9375 13.1376ZM12.375 0.626584C5.55 0.626584 0 6.2376 0 13.1376C0 20.0377 5.5125 25.6108 12.375 25.6487C19.2 25.6487 24.75 20.0377 24.75 13.1376C24.75 6.2376 19.2 0.626584 12.375 0.626584ZM36.975 10.9709V4.98079H44.9625C46.6125 4.98079 47.925 6.30772 47.925 7.97586C47.925 9.644 46.6125 10.9709 44.9625 10.9709H36.975ZM46.9125 14.7242C49.7625 13.8523 51.8625 11.1984 51.8625 8.01377C51.8625 4.14672 48.75 1 44.925 1H33V24.9985H36.975V14.9896H42.4875L48.45 24.9985H53.0625L46.9125 14.7242ZM72.375 1V4.98079H59.8125V11.0088H71.7375V14.9896H59.8125V21.0177H72.375V24.9985H55.8375V1H72.375ZM80.475 1H76.5V24.9985H80.475V1ZM84.6 1V24.9985H100.012V21.0177H88.575V1H84.6ZM103.238 24.9985V1H107.175V21.0177H118.613V24.9985H103.238ZM131.437 1H136.237L127.312 14.0797V24.9985H123.375V14.0418L114.45 1H119.25L125.362 9.90939L131.437 1Z"></path>
</svg>
</a><nav
data-hidden=sm><ul
class=orm-global-site-banner__list role=menu id=orm-global-site-navigation-list>
<li
class=orm-global-site-banner__list-item role=presentation id=orm-global-site-menu-item--desktop-explore-skills-0 data-level=0><button
class=orm-global-site-banner__link role=menuitem id=orm-global-site-menu-item-button--desktop-explore-skills-0 data-level=0 data-testid=header-link-0 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-menu-popover--desktop-explore-skills-0>Explore Skills </button><dialog
class=orm-global-site-menu__popover id=orm-global-site-menu-popover--desktop-explore-skills-0 aria-labelledby=orm-global-site-menu-item-button--desktop-explore-skills-0 data-level=1><ul
class=orm-global-site-menu><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-cloud-computing-0 data-level=1><button
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-cloud-computing-0 data-level=1 data-testid=menu-link|parent-header:0|item:0 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-menu-popover--desktop-cloud-computing-0>Cloud Computing <svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><dialog
class=orm-global-site-menu__popover id=orm-global-site-menu-popover--desktop-cloud-computing-0 aria-labelledby=orm-global-site-menu-item-button--desktop-cloud-computing-0 data-level=2><ul
class=orm-global-site-menu><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-microsoft-azure-0 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-microsoft-azure-0 data-testid=menu-link|parent-header:0|item:0 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|cloud computing|microsoft azure" }' data-gtm-event=mousedown href=/search/skills/microsoft-azure/ >Microsoft Azure</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-amazon-web-services-aws-1 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-amazon-web-services-aws-1 data-testid=menu-link|parent-header:0|item:1 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|cloud computing|amazon web services (aws)" }' data-gtm-event=mousedown href=/search/skills/amazon-web-services-aws/ >Amazon Web Services (AWS)</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-google-cloud-2 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-google-cloud-2 data-testid=menu-link|parent-header:0|item:2 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|cloud computing|google cloud" }' data-gtm-event=mousedown href=/search/skills/google-cloud/ >Google Cloud</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-cloud-migration-3 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-cloud-migration-3 data-testid=menu-link|parent-header:0|item:3 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|cloud computing|cloud migration" }' data-gtm-event=mousedown href=/search/skills/cloud-migration/ >Cloud Migration</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-cloud-deployment-4 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-cloud-deployment-4 data-testid=menu-link|parent-header:0|item:4 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|cloud computing|cloud deployment" }' data-gtm-event=mousedown href=/search/skills/cloud-deployment/ >Cloud Deployment</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-cloud-platforms-5 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-cloud-platforms-5 data-testid=menu-link|parent-header:0|item:5 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|cloud computing|cloud platforms" }' data-gtm-event=mousedown href=/search/skills/cloud-platforms/ >Cloud Platforms</a></li></ul><footer
class=orm-global-site-menu__footer><a
role=menuItem class=orm-global-site-menu__view-all data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"topics|view all cloud computing" }' data-gtm-event=mousedown href=/search/skills/cloud-computing/ ><div><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-tvi28v" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></div>View all</a></footer></dialog></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-data-engineering-1 data-level=1><button
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-data-engineering-1 data-level=1 data-testid=menu-link|parent-header:0|item:1 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-menu-popover--desktop-data-engineering-1>Data Engineering <svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><dialog
class=orm-global-site-menu__popover id=orm-global-site-menu-popover--desktop-data-engineering-1 aria-labelledby=orm-global-site-menu-item-button--desktop-data-engineering-1 data-level=2><ul
class=orm-global-site-menu><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-data-warehouse-0 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-data-warehouse-0 data-testid=menu-link|parent-header:1|item:0 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|data engineering|data warehouse" }' data-gtm-event=mousedown href=/search/skills/data-warehouse/ >Data Warehouse</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-sql-1 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-sql-1 data-testid=menu-link|parent-header:1|item:1 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|data engineering|sql" }' data-gtm-event=mousedown href=/search/skills/sql/ >SQL</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-apache-spark-2 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-apache-spark-2 data-testid=menu-link|parent-header:1|item:2 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|data engineering|apache spark" }' data-gtm-event=mousedown href=/search/skills/apache-spark/ >Apache Spark</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-microsoft-sql-server-3 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-microsoft-sql-server-3 data-testid=menu-link|parent-header:1|item:3 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|data engineering|microsoft sql server" }' data-gtm-event=mousedown href=/search/skills/microsoft-sql-server/ >Microsoft SQL Server</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-mysql-4 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-mysql-4 data-testid=menu-link|parent-header:1|item:4 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|data engineering|mysql" }' data-gtm-event=mousedown href=/search/skills/mysql/ >MySQL</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-kafka-5 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-kafka-5 data-testid=menu-link|parent-header:1|item:5 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|data engineering|kafka" }' data-gtm-event=mousedown href=/search/skills/kafka/ >Kafka</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-data-lake-6 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-data-lake-6 data-testid=menu-link|parent-header:1|item:6 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|data engineering|data lake" }' data-gtm-event=mousedown href=/search/skills/data-lake/ >Data Lake</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-streaming-messaging-7 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-streaming-messaging-7 data-testid=menu-link|parent-header:1|item:7 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|data engineering|streaming &amp; messaging" }' data-gtm-event=mousedown href=/search/skills/streaming-messaging/ >Streaming &amp; Messaging</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-nosql-databases-8 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-nosql-databases-8 data-testid=menu-link|parent-header:1|item:8 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|data engineering|nosql databases" }' data-gtm-event=mousedown href=/search/skills/nosql-databases/ >NoSQL Databases</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-relational-databases-9 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-relational-databases-9 data-testid=menu-link|parent-header:1|item:9 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|data engineering|relational databases" }' data-gtm-event=mousedown href=/search/skills/relational-databases/ >Relational Databases</a></li></ul><footer
class=orm-global-site-menu__footer><a
role=menuItem class=orm-global-site-menu__view-all data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"topics|view all data engineering" }' data-gtm-event=mousedown href=/search/skills/data-engineering/ ><div><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-tvi28v" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></div>View all</a></footer></dialog></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-data-science-2 data-level=1><button
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-data-science-2 data-level=1 data-testid=menu-link|parent-header:0|item:2 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-menu-popover--desktop-data-science-2>Data Science <svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><dialog
class=orm-global-site-menu__popover id=orm-global-site-menu-popover--desktop-data-science-2 aria-labelledby=orm-global-site-menu-item-button--desktop-data-science-2 data-level=2><ul
class=orm-global-site-menu><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-pandas-0 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-pandas-0 data-testid=menu-link|parent-header:2|item:0 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|data science|pandas" }' data-gtm-event=mousedown href=/search/topics/pandas/ >Pandas</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-r-1 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-r-1 data-testid=menu-link|parent-header:2|item:1 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|data science|r" }' data-gtm-event=mousedown href=/search/topics/r/ >R</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-matlab-2 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-matlab-2 data-testid=menu-link|parent-header:2|item:2 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|data science|matlab" }' data-gtm-event=mousedown href=/search/topics/matlab/ >MATLAB</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-sas-3 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-sas-3 data-testid=menu-link|parent-header:2|item:3 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|data science|sas" }' data-gtm-event=mousedown href=/search/topics/sas/ >SAS</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-d3-4 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-d3-4 data-testid=menu-link|parent-header:2|item:4 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|data science|d3" }' data-gtm-event=mousedown href=/search/topics/d3/ >D3</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-power-bi-5 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-power-bi-5 data-testid=menu-link|parent-header:2|item:5 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|data science|power bi" }' data-gtm-event=mousedown href=/search/topics/power-bi/ >Power BI</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-tableau-6 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-tableau-6 data-testid=menu-link|parent-header:2|item:6 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|data science|tableau" }' data-gtm-event=mousedown href=/search/topics/tableau/ >Tableau</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-statistics-7 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-statistics-7 data-testid=menu-link|parent-header:2|item:7 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|data science|statistics" }' data-gtm-event=mousedown href=/search/topics/statistics/ >Statistics</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-exploratory-data-analysis-8 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-exploratory-data-analysis-8 data-testid=menu-link|parent-header:2|item:8 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|data science|exploratory data analysis" }' data-gtm-event=mousedown href=/search/topics/exploratory-data-analysis/ >Exploratory Data Analysis</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-data-visualization-9 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-data-visualization-9 data-testid=menu-link|parent-header:2|item:9 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|data science|data visualization" }' data-gtm-event=mousedown href=/search/topics/data-visualization/ >Data Visualization</a></li></ul><footer
class=orm-global-site-menu__footer><a
role=menuItem class=orm-global-site-menu__view-all data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"topics|view all data science" }' data-gtm-event=mousedown href=/search/skills/data-science/ ><div><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-tvi28v" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></div>View all</a></footer></dialog></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-ai-ml-3 data-level=1><button
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-ai-ml-3 data-level=1 data-testid=menu-link|parent-header:0|item:3 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-menu-popover--desktop-ai-ml-3>AI &amp; ML <svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><dialog
class=orm-global-site-menu__popover id=orm-global-site-menu-popover--desktop-ai-ml-3 aria-labelledby=orm-global-site-menu-item-button--desktop-ai-ml-3 data-level=2><ul
class=orm-global-site-menu><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-generative-ai-0 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-generative-ai-0 data-testid=menu-link|parent-header:3|item:0 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|ai &amp; ml|generative ai" }' data-gtm-event=mousedown href=/search/skills/generative-ai/ >Generative AI</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-machine-learning-1 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-machine-learning-1 data-testid=menu-link|parent-header:3|item:1 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|ai &amp; ml|machine learning" }' data-gtm-event=mousedown href=/search/skills/machine-learning/ >Machine Learning</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-artificial-intelligence-ai-2 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-artificial-intelligence-ai-2 data-testid=menu-link|parent-header:3|item:2 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|ai &amp; ml|artificial intelligence (ai)" }' data-gtm-event=mousedown href=/search/skills/artificial-intelligence-ai/ >Artificial Intelligence (AI)</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-deep-learning-3 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-deep-learning-3 data-testid=menu-link|parent-header:3|item:3 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|ai &amp; ml|deep learning" }' data-gtm-event=mousedown href=/search/skills/deep-learning/ >Deep Learning</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-reinforcement-learning-4 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-reinforcement-learning-4 data-testid=menu-link|parent-header:3|item:4 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|ai &amp; ml|reinforcement learning" }' data-gtm-event=mousedown href=/search/skills/reinforcement-learning/ >Reinforcement Learning</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-natural-language-processing-5 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-natural-language-processing-5 data-testid=menu-link|parent-header:3|item:5 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|ai &amp; ml|natural language processing" }' data-gtm-event=mousedown href=/search/skills/natural-language-processing/ >Natural Language Processing</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-tensorflow-6 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-tensorflow-6 data-testid=menu-link|parent-header:3|item:6 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|ai &amp; ml|tensorflow" }' data-gtm-event=mousedown href=/search/skills/tensorflow/ >TensorFlow</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-scikit-learn-7 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-scikit-learn-7 data-testid=menu-link|parent-header:3|item:7 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|ai &amp; ml|scikit-learn" }' data-gtm-event=mousedown href=/search/skills/scikit-learn/ >Scikit-Learn</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-hyperparameter-tuning-8 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-hyperparameter-tuning-8 data-testid=menu-link|parent-header:3|item:8 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|ai &amp; ml|hyperparameter tuning" }' data-gtm-event=mousedown href=/search/skills/hyperparameter-tuning/ >Hyperparameter Tuning</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-mlops-9 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-mlops-9 data-testid=menu-link|parent-header:3|item:9 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|ai &amp; ml|mlops" }' data-gtm-event=mousedown href=/search/skills/mlops/ >MLOps</a></li></ul><footer
class=orm-global-site-menu__footer><a
role=menuItem class=orm-global-site-menu__view-all data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"topics|view all ai &amp; ml" }' data-gtm-event=mousedown href=/search/skills/ai-ml/ ><div><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-tvi28v" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></div>View all</a></footer></dialog></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-programming-languages-4 data-level=1><button
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-programming-languages-4 data-level=1 data-testid=menu-link|parent-header:0|item:4 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-menu-popover--desktop-programming-languages-4>Programming Languages <svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><dialog
class=orm-global-site-menu__popover id=orm-global-site-menu-popover--desktop-programming-languages-4 aria-labelledby=orm-global-site-menu-item-button--desktop-programming-languages-4 data-level=2><ul
class=orm-global-site-menu><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-java-0 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-java-0 data-testid=menu-link|parent-header:4|item:0 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|programming languages|java" }' data-gtm-event=mousedown href=/search/skills/java/ >Java</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-javascript-1 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-javascript-1 data-testid=menu-link|parent-header:4|item:1 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|programming languages|javascript" }' data-gtm-event=mousedown href=/search/skills/javascript/ >JavaScript</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-spring-2 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-spring-2 data-testid=menu-link|parent-header:4|item:2 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|programming languages|spring" }' data-gtm-event=mousedown href=/search/skills/spring/ >Spring</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-python-3 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-python-3 data-testid=menu-link|parent-header:4|item:3 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|programming languages|python" }' data-gtm-event=mousedown href=/search/skills/python/ >Python</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-go-4 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-go-4 data-testid=menu-link|parent-header:4|item:4 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|programming languages|go" }' data-gtm-event=mousedown href=/search/skills/go/ >Go</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-c-5 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-c-5 data-testid=menu-link|parent-header:4|item:5 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|programming languages|c#" }' data-gtm-event=mousedown href=/search/skills/c-sharp/ >C#</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-c-6 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-c-6 data-testid=menu-link|parent-header:4|item:6 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|programming languages|c++" }' data-gtm-event=mousedown href=/search/skills/c-plus-plus/ >C++</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-c-7 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-c-7 data-testid=menu-link|parent-header:4|item:7 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|programming languages|c" }' data-gtm-event=mousedown href=/search/skills/c/ >C</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-swift-8 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-swift-8 data-testid=menu-link|parent-header:4|item:8 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|programming languages|swift" }' data-gtm-event=mousedown href=/search/skills/swift/ >Swift</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-rust-9 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-rust-9 data-testid=menu-link|parent-header:4|item:9 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|programming languages|rust" }' data-gtm-event=mousedown href=/search/skills/rust/ >Rust</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-functional-programming-10 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-functional-programming-10 data-testid=menu-link|parent-header:4|item:10 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|programming languages|functional programming" }' data-gtm-event=mousedown href=/search/skills/functional-programming/ >Functional Programming</a></li></ul><footer
class=orm-global-site-menu__footer><a
role=menuItem class=orm-global-site-menu__view-all data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"topics|view all programming languages" }' data-gtm-event=mousedown href=/search/skills/programming-languages/ ><div><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-tvi28v" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></div>View all</a></footer></dialog></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-software-architecture-5 data-level=1><button
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-software-architecture-5 data-level=1 data-testid=menu-link|parent-header:0|item:5 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-menu-popover--desktop-software-architecture-5>Software Architecture <svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><dialog
class=orm-global-site-menu__popover id=orm-global-site-menu-popover--desktop-software-architecture-5 aria-labelledby=orm-global-site-menu-item-button--desktop-software-architecture-5 data-level=2><ul
class=orm-global-site-menu><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-object-oriented-0 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-object-oriented-0 data-testid=menu-link|parent-header:5|item:0 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|software architecture|object-oriented" }' data-gtm-event=mousedown href=/search/skills/object-oriented-architecture/ >Object-Oriented</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-distributed-systems-1 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-distributed-systems-1 data-testid=menu-link|parent-header:5|item:1 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|software architecture|distributed systems" }' data-gtm-event=mousedown href=/search/skills/distributed-systems/ >Distributed Systems</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-domain-driven-design-2 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-domain-driven-design-2 data-testid=menu-link|parent-header:5|item:2 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|software architecture|domain-driven design" }' data-gtm-event=mousedown href=/search/skills/domain-driven-design/ >Domain-Driven Design</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-architectural-patterns-3 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-architectural-patterns-3 data-testid=menu-link|parent-header:5|item:3 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|software architecture|architectural patterns" }' data-gtm-event=mousedown href=/search/skills/architectural-patterns/ >Architectural Patterns</a></li></ul><footer
class=orm-global-site-menu__footer><a
role=menuItem class=orm-global-site-menu__view-all data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"topics|view all software architecture" }' data-gtm-event=mousedown href=/search/skills/software-architecture/ ><div><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-tvi28v" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></div>View all</a></footer></dialog></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-itops-6 data-level=1><button
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-itops-6 data-level=1 data-testid=menu-link|parent-header:0|item:6 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-menu-popover--desktop-itops-6>IT/Ops <svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><dialog
class=orm-global-site-menu__popover id=orm-global-site-menu-popover--desktop-itops-6 aria-labelledby=orm-global-site-menu-item-button--desktop-itops-6 data-level=2><ul
class=orm-global-site-menu><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-kubernetes-0 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-kubernetes-0 data-testid=menu-link|parent-header:6|item:0 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|it/ops|kubernetes" }' data-gtm-event=mousedown href=/search/topics/kubernetes/ >Kubernetes</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-docker-1 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-docker-1 data-testid=menu-link|parent-header:6|item:1 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|it/ops|docker" }' data-gtm-event=mousedown href=/search/topics/docker/ >Docker</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-github-2 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-github-2 data-testid=menu-link|parent-header:6|item:2 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|it/ops|github" }' data-gtm-event=mousedown href=/search/topics/github/ >GitHub</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-terraform-3 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-terraform-3 data-testid=menu-link|parent-header:6|item:3 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|it/ops|terraform" }' data-gtm-event=mousedown href=/search/topics/terraform/ >Terraform</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-continuous-delivery-4 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-continuous-delivery-4 data-testid=menu-link|parent-header:6|item:4 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|it/ops|continuous delivery" }' data-gtm-event=mousedown href=/search/topics/continuous-delivery/ >Continuous Delivery</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-continuous-integration-5 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-continuous-integration-5 data-testid=menu-link|parent-header:6|item:5 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|it/ops|continuous integration" }' data-gtm-event=mousedown href=/search/topics/continuous-integration/ >Continuous Integration</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-database-administration-6 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-database-administration-6 data-testid=menu-link|parent-header:6|item:6 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|it/ops|database administration" }' data-gtm-event=mousedown href=/search/topics/database-administration/ >Database Administration</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-computer-networking-7 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-computer-networking-7 data-testid=menu-link|parent-header:6|item:7 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|it/ops|computer networking" }' data-gtm-event=mousedown href=/search/topics/computer-networking/ >Computer Networking</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-operating-systems-8 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-operating-systems-8 data-testid=menu-link|parent-header:6|item:8 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|it/ops|operating systems" }' data-gtm-event=mousedown href=/search/topics/operating-systems/ >Operating Systems</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-it-certifications-9 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-it-certifications-9 data-testid=menu-link|parent-header:6|item:9 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|it/ops|it certifications" }' data-gtm-event=mousedown href=/search/topics/it-certifications/ >IT Certifications</a></li></ul><footer
class=orm-global-site-menu__footer><a
role=menuItem class=orm-global-site-menu__view-all data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"topics|view all it/ops" }' data-gtm-event=mousedown href=/search/skills/it-operations/ ><div><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-tvi28v" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></div>View all</a></footer></dialog></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-security-7 data-level=1><button
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-security-7 data-level=1 data-testid=menu-link|parent-header:0|item:7 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-menu-popover--desktop-security-7>Security <svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><dialog
class=orm-global-site-menu__popover id=orm-global-site-menu-popover--desktop-security-7 aria-labelledby=orm-global-site-menu-item-button--desktop-security-7 data-level=2><ul
class=orm-global-site-menu><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-network-security-0 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-network-security-0 data-testid=menu-link|parent-header:7|item:0 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|security|network security" }' data-gtm-event=mousedown href=/search/skills/network-security/ >Network Security</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-application-security-1 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-application-security-1 data-testid=menu-link|parent-header:7|item:1 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|security|application security" }' data-gtm-event=mousedown href=/search/skills/application-security/ >Application Security</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-incident-response-2 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-incident-response-2 data-testid=menu-link|parent-header:7|item:2 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|security|incident response" }' data-gtm-event=mousedown href=/search/skills/incident-response/ >Incident Response</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-zero-trust-model-3 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-zero-trust-model-3 data-testid=menu-link|parent-header:7|item:3 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|security|zero trust model" }' data-gtm-event=mousedown href=/search/skills/zero-trust-model/ >Zero Trust Model</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-disaster-recovery-4 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-disaster-recovery-4 data-testid=menu-link|parent-header:7|item:4 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|security|disaster recovery" }' data-gtm-event=mousedown href=/search/skills/disaster-recovery/ >Disaster Recovery</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-penetration-testing-ethical-hacking-5 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-penetration-testing-ethical-hacking-5 data-testid=menu-link|parent-header:7|item:5 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|security|penetration testing / ethical hacking" }' data-gtm-event=mousedown href=/search/skills/penetration-testing-ethical-hacking/ >Penetration Testing / Ethical Hacking</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-governance-6 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-governance-6 data-testid=menu-link|parent-header:7|item:6 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|security|governance" }' data-gtm-event=mousedown href=/search/skills/governance/ >Governance</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-malware-7 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-malware-7 data-testid=menu-link|parent-header:7|item:7 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|security|malware" }' data-gtm-event=mousedown href=/search/skills/malware/ >Malware</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-security-architecture-8 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-security-architecture-8 data-testid=menu-link|parent-header:7|item:8 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|security|security architecture" }' data-gtm-event=mousedown href=/search/skills/security-architecture/ >Security Architecture</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-security-engineering-9 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-security-engineering-9 data-testid=menu-link|parent-header:7|item:9 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|security|security engineering" }' data-gtm-event=mousedown href=/search/skills/security-engineering/ >Security Engineering</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-security-certifications-10 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-security-certifications-10 data-testid=menu-link|parent-header:7|item:10 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|security|security certifications" }' data-gtm-event=mousedown href=/search/skills/security-certifications/ >Security Certifications</a></li></ul><footer
class=orm-global-site-menu__footer><a
role=menuItem class=orm-global-site-menu__view-all data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"topics|view all security" }' data-gtm-event=mousedown href=/search/skills/security/ ><div><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-tvi28v" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></div>View all</a></footer></dialog></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-design-8 data-level=1><button
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-design-8 data-level=1 data-testid=menu-link|parent-header:0|item:8 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-menu-popover--desktop-design-8>Design <svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><dialog
class=orm-global-site-menu__popover id=orm-global-site-menu-popover--desktop-design-8 aria-labelledby=orm-global-site-menu-item-button--desktop-design-8 data-level=2><ul
class=orm-global-site-menu><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-web-design-0 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-web-design-0 data-testid=menu-link|parent-header:8|item:0 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|design|web design" }' data-gtm-event=mousedown href=/search/skills/web-design/ >Web Design</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-graphic-design-1 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-graphic-design-1 data-testid=menu-link|parent-header:8|item:1 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|design|graphic design" }' data-gtm-event=mousedown href=/search/skills/graphic-design/ >Graphic Design</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-interaction-design-2 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-interaction-design-2 data-testid=menu-link|parent-header:8|item:2 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|design|interaction design" }' data-gtm-event=mousedown href=/search/skills/interaction-design/ >Interaction Design</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-film-video-3 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-film-video-3 data-testid=menu-link|parent-header:8|item:3 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|design|film &amp; video" }' data-gtm-event=mousedown href=/search/skills/film-video/ >Film &amp; Video</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-user-experience-ux-4 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-user-experience-ux-4 data-testid=menu-link|parent-header:8|item:4 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|design|user experience (ux)" }' data-gtm-event=mousedown href=/search/skills/user-experience-ux/ >User Experience (UX)</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-design-process-5 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-design-process-5 data-testid=menu-link|parent-header:8|item:5 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|design|design process" }' data-gtm-event=mousedown href=/search/skills/design-process/ >Design Process</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-design-tools-6 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-design-tools-6 data-testid=menu-link|parent-header:8|item:6 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|design|design tools" }' data-gtm-event=mousedown href=/search/skills/design-tools/ >Design Tools</a></li></ul><footer
class=orm-global-site-menu__footer><a
role=menuItem class=orm-global-site-menu__view-all data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"topics|view all design" }' data-gtm-event=mousedown href=/search/skills/design/ ><div><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-tvi28v" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></div>View all</a></footer></dialog></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-business-9 data-level=1><button
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-business-9 data-level=1 data-testid=menu-link|parent-header:0|item:9 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-menu-popover--desktop-business-9>Business <svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><dialog
class=orm-global-site-menu__popover id=orm-global-site-menu-popover--desktop-business-9 aria-labelledby=orm-global-site-menu-item-button--desktop-business-9 data-level=2><ul
class=orm-global-site-menu><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-agile-0 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-agile-0 data-testid=menu-link|parent-header:9|item:0 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|business|agile" }' data-gtm-event=mousedown href=/search/skills/agile/ >Agile</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-project-management-1 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-project-management-1 data-testid=menu-link|parent-header:9|item:1 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|business|project management" }' data-gtm-event=mousedown href=/search/skills/project-management/ >Project Management</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-product-management-2 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-product-management-2 data-testid=menu-link|parent-header:9|item:2 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|business|product management" }' data-gtm-event=mousedown href=/search/skills/product-management/ >Product Management</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-marketing-3 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-marketing-3 data-testid=menu-link|parent-header:9|item:3 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|business|marketing" }' data-gtm-event=mousedown href=/search/skills/marketing/ >Marketing</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-human-resources-4 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-human-resources-4 data-testid=menu-link|parent-header:9|item:4 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|business|human resources" }' data-gtm-event=mousedown href=/search/skills/human-resources/ >Human Resources</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-finance-5 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-finance-5 data-testid=menu-link|parent-header:9|item:5 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|business|finance" }' data-gtm-event=mousedown href=/search/skills/finance/ >Finance</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-team-management-6 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-team-management-6 data-testid=menu-link|parent-header:9|item:6 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|business|team management" }' data-gtm-event=mousedown href=/search/skills/team-management/ >Team Management</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-business-strategy-7 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-business-strategy-7 data-testid=menu-link|parent-header:9|item:7 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|business|business strategy" }' data-gtm-event=mousedown href=/search/skills/business-strategy/ >Business Strategy</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-digital-transformation-8 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-digital-transformation-8 data-testid=menu-link|parent-header:9|item:8 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|business|digital transformation" }' data-gtm-event=mousedown href=/search/skills/digital-transformation/ >Digital Transformation</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-organizational-leadership-9 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-organizational-leadership-9 data-testid=menu-link|parent-header:9|item:9 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|business|organizational leadership" }' data-gtm-event=mousedown href=/search/skills/organizational-leadership/ >Organizational Leadership</a></li></ul><footer
class=orm-global-site-menu__footer><a
role=menuItem class=orm-global-site-menu__view-all data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"topics|view all business" }' data-gtm-event=mousedown href=/search/skills/business/ ><div><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-tvi28v" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></div>View all</a></footer></dialog></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-soft-skills-10 data-level=1><button
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-soft-skills-10 data-level=1 data-testid=menu-link|parent-header:0|item:10 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-menu-popover--desktop-soft-skills-10>Soft Skills <svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><dialog
class=orm-global-site-menu__popover id=orm-global-site-menu-popover--desktop-soft-skills-10 aria-labelledby=orm-global-site-menu-item-button--desktop-soft-skills-10 data-level=2><ul
class=orm-global-site-menu><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-professional-communication-0 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-professional-communication-0 data-testid=menu-link|parent-header:10|item:0 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|soft skills|professional communication" }' data-gtm-event=mousedown href=/search/skills/professional-communication/ >Professional Communication</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-emotional-intelligence-1 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-emotional-intelligence-1 data-testid=menu-link|parent-header:10|item:1 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|soft skills|emotional intelligence" }' data-gtm-event=mousedown href=/search/skills/emotional-intelligence/ >Emotional Intelligence</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-presentation-skills-2 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-presentation-skills-2 data-testid=menu-link|parent-header:10|item:2 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|soft skills|presentation skills" }' data-gtm-event=mousedown href=/search/skills/presentation-skills/ >Presentation Skills</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-innovation-3 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-innovation-3 data-testid=menu-link|parent-header:10|item:3 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|soft skills|innovation" }' data-gtm-event=mousedown href=/search/skills/innovation/ >Innovation</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-critical-thinking-4 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-critical-thinking-4 data-testid=menu-link|parent-header:10|item:4 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|soft skills|critical thinking" }' data-gtm-event=mousedown href=/search/skills/critical-thinking/ >Critical Thinking</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-public-speaking-5 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-public-speaking-5 data-testid=menu-link|parent-header:10|item:5 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|soft skills|public speaking" }' data-gtm-event=mousedown href=/search/skills/public-speaking/ >Public Speaking</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-collaboration-6 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-collaboration-6 data-testid=menu-link|parent-header:10|item:6 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|soft skills|collaboration" }' data-gtm-event=mousedown href=/search/skills/collaboration/ >Collaboration</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-personal-productivity-7 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-personal-productivity-7 data-testid=menu-link|parent-header:10|item:7 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|soft skills|personal productivity" }' data-gtm-event=mousedown href=/search/skills/personal-productivity/ >Personal Productivity</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-confidence-motivation-8 data-level=2><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-confidence-motivation-8 data-testid=menu-link|parent-header:10|item:8 data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"explore skills|soft skills|confidence / motivation" }' data-gtm-event=mousedown href=/search/skills/confidence-motivation/ >Confidence / Motivation</a></li></ul><footer
class=orm-global-site-menu__footer><a
role=menuItem class=orm-global-site-menu__view-all data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"topics|view all soft skills" }' data-gtm-event=mousedown href=/search/skills/soft-skills/ ><div><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-tvi28v" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></div>View all</a></footer></dialog></li></ul><footer
class=orm-global-site-menu__footer><a
role=menuItem class=orm-global-site-menu__view-all data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"topics|view all topics" }' data-gtm-event=mousedown href=/search/skills/ ><div><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-tvi28v" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></div>View all</a></footer></dialog></li><li
class=orm-global-site-banner__list-item role=presentation id=orm-global-site-menu-item--desktop-features-1 data-level=0><button
class=orm-global-site-banner__link role=menuitem id=orm-global-site-menu-item-button--desktop-features-1 data-level=0 data-testid=header-link-1 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-menu-popover--desktop-features-1>Features </button><dialog
class=orm-global-site-menu__popover id=orm-global-site-menu-popover--desktop-features-1 aria-labelledby=orm-global-site-menu-item-button--desktop-features-1 data-level=1><ul
class=orm-global-site-menu><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-all-features-0 data-level=1><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-all-features-0 data-testid=menu-link|parent-header:1|item:0 href=/online-learning/features.html>All features</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-verifiable-skills-1 data-level=1><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-verifiable-skills-1 data-testid=menu-link|parent-header:1|item:1 href=/online-learning/verifiable-skills.html>Verifiable skills</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-academies-2 data-level=1><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-academies-2 data-testid=menu-link|parent-header:1|item:2 href=/online-learning/academies.html>Academies</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-courses-3 data-level=1><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-courses-3 data-testid=menu-link|parent-header:1|item:3 href=/online-learning/courses.html>Courses</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-certifications-4 data-level=1><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-certifications-4 data-testid=menu-link|parent-header:1|item:4 href=/online-learning/feature-certification.html>Certifications</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-interactive-learning-5 data-level=1><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-interactive-learning-5 data-testid=menu-link|parent-header:1|item:5 href=/online-learning/intro-interactive-learning.html>Interactive learning</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-live-events-6 data-level=1><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-live-events-6 data-testid=menu-link|parent-header:1|item:6 href=/online-learning/live-events.html>Live events</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-superstreams-7 data-level=1><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-superstreams-7 data-testid=menu-link|parent-header:1|item:7 href=/products/superstreams.html>Superstreams</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-answers-8 data-level=1><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-answers-8 data-testid=menu-link|parent-header:1|item:8 href=/online-learning/feature-answers.html>Answers</a></li><li
class=orm-global-site-menu__item role=presentation id=orm-global-site-menu-item--desktop-insights-reporting-9 data-level=1><a
class=orm-global-site-menu__link role=menuitem id=orm-global-site-menu-item-button--desktop-insights-reporting-9 data-testid=menu-link|parent-header:1|item:9 href=/online-learning/insights-dashboard.html>Insights reporting</a></li></ul></dialog></li><li
class=orm-global-site-banner__list-item role=presentation id=orm-global-site-menu-item--desktop-radar-blog-2 data-level=0><a
class=orm-global-site-banner__link role=menuitem id=orm-global-site-menu-item-button--desktop-radar-blog-2 data-testid=header-link-2 href=/radar/ >Radar Blog</a></li><li
class=orm-global-site-banner__list-item role=presentation id=orm-global-site-menu-item--desktop-live-3 data-level=0><a
class=orm-global-site-banner__link role=menuitem id=orm-global-site-menu-item-button--desktop-live-3 data-testid=header-link-3 href=/live/ >Live</a></li></ul></nav></div><div
class=orm-global-site-banner__block data-hidden=sm><form
action=https://www.oreilly.com/search/ class=orm-global-site-search-form method=get data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"keyboard|enter" }' data-gtm-event=submit id=orm-global-site-search-form--desktop><div
class=orm-global-site-search-icon><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 12 12" fill=none><path
fill-rule=evenodd clip-rule=evenodd d="M10.6645 12L6.2575 7.59302L7.59302 6.2575L12 10.6645L10.6645 12Z" fill=currentColor></path><path
fill-rule=evenodd clip-rule=evenodd d="M4.5 9C6.98528 9 9 6.98528 9 4.5C9 2.01472 6.98528 0 4.5 0C2.01472 0 0 2.01472 0 4.5C0 6.98528 2.01472 9 4.5 9ZM7 4.5C7 5.88071 5.88071 7 4.5 7C3.11929 7 2 5.88071 2 4.5C2 3.11929 3.11929 2 4.5 2C5.88071 2 7 3.11929 7 4.5Z" fill=currentColor></path></svg></div><label
class=orm-global-site-search-label><span
class=orm-global-site-search-label__text>Search for books, courses, events, and more</span><input
class=orm-global-site-search-input placeholder="Search for books, courses, events, and more" type=search name=q></label></form></div><div
class=orm-global-site-banner__block data-hidden=sm><nav><ul
class=orm-global-site-banner__list role=menu id=orm-global-site-navigation-list--signin>
<li
id=orm-global-site-banner__list-item role=presentation><a
class=orm-global-site-banner__link role=menuitem data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"plans" }' data-gtm-event=mousedown href=https://www.oreilly.com/online-learning/pricing.html>Plans</a></li><li
class=orm-global-site-banner__list-item data-hidden=auth role=presentation><a
class=orm-global-site-banner__link role=menuitem data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"sign in" }' data-gtm-event=mousedown href="https://www.oreilly.com/member/login/?next=%2Fcontent%2Fwhats-in-a-transport-layer%2F%3Fcmp%3Dtw-webops-na-article-vleu17_transport_layer_vleu_kb">Sign In</a></li><li
class=orm-global-site-banner__list-item data-hidden=auth role=presentation><a
class="orm-global-site-banner__link orm-global-site--link-as-button" role=menuitem data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"try now" }' data-gtm-event=mousedown href=https://www.oreilly.com/online-learning/try-now.html>Try Now<svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=inherit></path></svg></a></li><li
class="menu__item menu-item" data-hidden=notauth><a
class="orm-global-site-banner__link orm-global-site--link-as-button" role=menuitem data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"oreilly platform" }' data-gtm-event=mousedown href=https://www.oreilly.com/member/login/ >O'Reilly Platform<svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=inherit></path></svg></a></li></ul></nav></div><button
class=orm-global-mobile-toggle type=button aria-expanded=false aria-label="Toggle search input visible" data-mobile-toggle=true data-testid=mobile-search-toggle aria-controls=orm-global-mobile-pane--search>
<svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 12 12" fill=none data-closed-icon=true>
<path
fill-rule=evenodd clip-rule=evenodd d="M10.6645 12L6.2575 7.59302L7.59302 6.2575L12 10.6645L10.6645 12Z" fill=var(--orm-modern-dark)></path>
<path
fill-rule=evenodd clip-rule=evenodd d="M4.5 9C6.98528 9 9 6.98528 9 4.5C9 2.01472 6.98528 0 4.5 0C2.01472 0 0 2.01472 0 4.5C0 6.98528 2.01472 9 4.5 9ZM7 4.5C7 5.88071 5.88071 7 4.5 7C3.11929 7 2 5.88071 2 4.5C2 3.11929 3.11929 2 4.5 2C5.88071 2 7 3.11929 7 4.5Z" fill=var(--orm-modern-dark)></path>
</svg>
<svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 8 8" fill=none data-open-icon=true>
<path
fill-rule=evenodd clip-rule=evenodd d="M0.948112 0C0.408563 0 4.11814e-06 0.431923 4.11814e-06 0.95467C4.11814e-06 1.22411 0.111261 1.45183 0.267234 1.61743L2.58966 4.00047L0.27598 6.37752C0.108619 6.54684 0 6.77982 0 7.04533C0 7.56808 0.408558 8 0.948108 8C1.20588 8 1.43872 7.89659 1.60824 7.73661L1.61715 7.7282L3.99833 5.28676L6.37456 7.71975L6.37891 7.72411C6.5552 7.90088 6.79692 8 7.05189 8C7.59144 8 8 7.56808 8 7.04533C8 6.77589 7.88874 6.54817 7.73277 6.38257L5.41034 3.99953L7.72402 1.62247C7.89138 1.45316 8 1.22017 8 0.95467C8 0.431923 7.59144 0 7.05189 0C6.79412 0 6.56126 0.10342 6.39175 0.263408L6.38285 0.27181L4.00167 2.71324L1.62544 0.280255L1.62109 0.275892C1.4448 0.099117 1.20308 0 0.948112 0Z" fill=var(--orm-modern-r500)></path>
</svg>
</button></div></header><nav
class=orm-global-mobile-pane aria-hidden=true inert hidden id=orm-global-mobile-pane--navigation data-testid=mobile-menu-pane><ul
class=orm-global-site-mobile-menu role=menu>
<li
class=orm-global-site-mobile-menu__item data-level=0 role=presentation><a
class=orm-global-site-mobile-menu__link role=menuitem data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"for enterprise" }' data-gtm-event=mousedown href=https://www.oreilly.com/online-learning/teams.html>For Enterprise</a></li><li
class=orm-global-site-mobile-menu__item data-level=0 role=presentation><a
class=orm-global-site-mobile-menu__link role=menuitem data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"for government" }' data-gtm-event=mousedown href=https://www.oreilly.com/online-learning/government.html>For Government</a></li><li
class=orm-global-site-mobile-menu__item data-level=0 role=presentation><a
class=orm-global-site-mobile-menu__link role=menuitem data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"for higher ed" }' data-gtm-event=mousedown href=https://www.oreilly.com/online-learning/academic.html>For Higher Ed</a></li><li
class=orm-global-site-mobile-menu__item data-level=0 role=presentation><a
class=orm-global-site-mobile-menu__link role=menuitem data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"for individuals" }' data-gtm-event=mousedown href=https://www.oreilly.com/online-learning/individuals.html>For Individuals</a></li><li
class=orm-global-site-mobile-menu__item data-level=0 role=presentation><a
class=orm-global-site-mobile-menu__link role=menuitem data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"for content marketing" }' data-gtm-event=mousedown href=https://www.oreilly.com/content-marketing-solutions.html>For Content Marketing</a></li></ul><hr
class=orm-global-site-menu__divider><ul
class=orm-global-site-mobile-menu role=menu>
<li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-explore-skills-0 data-level=0><button
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-explore-skills-0 data-level=0 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-mobile-menu-drawer--mobile-explore-skills-0>Explore Skills<svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><div
class=orm-global-mobile-drawer hidden inert id=orm-global-site-mobile-menu-drawer--mobile-explore-skills-0 aria-labelledby=orm-global-site-mobile-menu__link--mobile-explore-skills-0 data-level=1><header
class=orm-global-site-mobile-menu__header><h3 class="orm-global-site-mobile-menu__title">Explore Skills</h3></header><ul
class=orm-global-site-mobile-menu role=menu data-level=1><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-cloud-computing-0 data-level=1><button
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-cloud-computing-0 data-level=1 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-mobile-menu-drawer--mobile-cloud-computing-0>Cloud Computing<svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><div
class=orm-global-mobile-drawer hidden inert id=orm-global-site-mobile-menu-drawer--mobile-cloud-computing-0 aria-labelledby=orm-global-site-mobile-menu__link--mobile-cloud-computing-0 data-level=2><header
class=orm-global-site-mobile-menu__header><h3 class="orm-global-site-mobile-menu__title">Cloud Computing</h3></header><ul
class=orm-global-site-mobile-menu role=menu data-level=2><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-microsoft-azure-0 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-microsoft-azure-0 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|cloud computing|microsoft azure" }' data-gtm-event=mousedown href=/search/skills/microsoft-azure/ >Microsoft Azure</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-amazon-web-services-aws-1 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-amazon-web-services-aws-1 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|cloud computing|amazon web services (aws)" }' data-gtm-event=mousedown href=/search/skills/amazon-web-services-aws/ >Amazon Web Services (AWS)</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-google-cloud-2 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-google-cloud-2 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|cloud computing|google cloud" }' data-gtm-event=mousedown href=/search/skills/google-cloud/ >Google Cloud</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-cloud-migration-3 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-cloud-migration-3 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|cloud computing|cloud migration" }' data-gtm-event=mousedown href=/search/skills/cloud-migration/ >Cloud Migration</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-cloud-deployment-4 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-cloud-deployment-4 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|cloud computing|cloud deployment" }' data-gtm-event=mousedown href=/search/skills/cloud-deployment/ >Cloud Deployment</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-cloud-platforms-5 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-cloud-platforms-5 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|cloud computing|cloud platforms" }' data-gtm-event=mousedown href=/search/skills/cloud-platforms/ >Cloud Platforms</a></li></ul><footer
class=orm-global-site-mobile-menu__footer><button
role=menuItem class=orm-global-site-mobile-menu__back-button aria-label="Back to previous menu" type=button data-back-button-for=orm-global-site-mobile-menu-drawer--mobile-cloud-computing-0><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M15 16.7142C15 17.4465 14.3897 18 13.6295 18C13.2484 18 12.9211 17.8528 12.6718 17.6304L5.42447 10.9405L5.42017 10.9365C5.15388 10.6849 5 10.3615 5 9.99568C5 9.65583 5.14145 9.30318 5.43187 9.05271L12.6726 2.37726C12.9196 2.14511 13.2517 2 13.6295 2C14.3897 2 15 2.55348 15 3.28584C15 3.63671 14.8514 3.95598 14.6184 4.18983L14.6109 4.19737L8.33405 9.99593L14.6034 15.7956L14.6073 15.7993C14.8552 16.0335 15 16.3602 15 16.7142Z" fill=currentColor></path></svg>Back</button></footer></div></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-data-engineering-1 data-level=1><button
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-data-engineering-1 data-level=1 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-mobile-menu-drawer--mobile-data-engineering-1>Data Engineering<svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><div
class=orm-global-mobile-drawer hidden inert id=orm-global-site-mobile-menu-drawer--mobile-data-engineering-1 aria-labelledby=orm-global-site-mobile-menu__link--mobile-data-engineering-1 data-level=2><header
class=orm-global-site-mobile-menu__header><h3 class="orm-global-site-mobile-menu__title">Data Engineering</h3></header><ul
class=orm-global-site-mobile-menu role=menu data-level=2><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-data-warehouse-0 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-data-warehouse-0 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|data engineering|data warehouse" }' data-gtm-event=mousedown href=/search/skills/data-warehouse/ >Data Warehouse</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-sql-1 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-sql-1 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|data engineering|sql" }' data-gtm-event=mousedown href=/search/skills/sql/ >SQL</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-apache-spark-2 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-apache-spark-2 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|data engineering|apache spark" }' data-gtm-event=mousedown href=/search/skills/apache-spark/ >Apache Spark</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-microsoft-sql-server-3 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-microsoft-sql-server-3 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|data engineering|microsoft sql server" }' data-gtm-event=mousedown href=/search/skills/microsoft-sql-server/ >Microsoft SQL Server</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-mysql-4 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-mysql-4 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|data engineering|mysql" }' data-gtm-event=mousedown href=/search/skills/mysql/ >MySQL</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-kafka-5 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-kafka-5 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|data engineering|kafka" }' data-gtm-event=mousedown href=/search/skills/kafka/ >Kafka</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-data-lake-6 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-data-lake-6 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|data engineering|data lake" }' data-gtm-event=mousedown href=/search/skills/data-lake/ >Data Lake</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-streaming-messaging-7 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-streaming-messaging-7 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|data engineering|streaming &amp; messaging" }' data-gtm-event=mousedown href=/search/skills/streaming-messaging/ >Streaming &amp; Messaging</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-nosql-databases-8 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-nosql-databases-8 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|data engineering|nosql databases" }' data-gtm-event=mousedown href=/search/skills/nosql-databases/ >NoSQL Databases</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-relational-databases-9 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-relational-databases-9 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|data engineering|relational databases" }' data-gtm-event=mousedown href=/search/skills/relational-databases/ >Relational Databases</a></li></ul><footer
class=orm-global-site-mobile-menu__footer><button
role=menuItem class=orm-global-site-mobile-menu__back-button aria-label="Back to previous menu" type=button data-back-button-for=orm-global-site-mobile-menu-drawer--mobile-data-engineering-1><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M15 16.7142C15 17.4465 14.3897 18 13.6295 18C13.2484 18 12.9211 17.8528 12.6718 17.6304L5.42447 10.9405L5.42017 10.9365C5.15388 10.6849 5 10.3615 5 9.99568C5 9.65583 5.14145 9.30318 5.43187 9.05271L12.6726 2.37726C12.9196 2.14511 13.2517 2 13.6295 2C14.3897 2 15 2.55348 15 3.28584C15 3.63671 14.8514 3.95598 14.6184 4.18983L14.6109 4.19737L8.33405 9.99593L14.6034 15.7956L14.6073 15.7993C14.8552 16.0335 15 16.3602 15 16.7142Z" fill=currentColor></path></svg>Back</button></footer></div></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-data-science-2 data-level=1><button
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-data-science-2 data-level=1 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-mobile-menu-drawer--mobile-data-science-2>Data Science<svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><div
class=orm-global-mobile-drawer hidden inert id=orm-global-site-mobile-menu-drawer--mobile-data-science-2 aria-labelledby=orm-global-site-mobile-menu__link--mobile-data-science-2 data-level=2><header
class=orm-global-site-mobile-menu__header><h3 class="orm-global-site-mobile-menu__title">Data Science</h3></header><ul
class=orm-global-site-mobile-menu role=menu data-level=2><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-pandas-0 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-pandas-0 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|data science|pandas" }' data-gtm-event=mousedown href=/search/topics/pandas/ >Pandas</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-r-1 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-r-1 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|data science|r" }' data-gtm-event=mousedown href=/search/topics/r/ >R</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-matlab-2 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-matlab-2 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|data science|matlab" }' data-gtm-event=mousedown href=/search/topics/matlab/ >MATLAB</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-sas-3 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-sas-3 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|data science|sas" }' data-gtm-event=mousedown href=/search/topics/sas/ >SAS</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-d3-4 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-d3-4 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|data science|d3" }' data-gtm-event=mousedown href=/search/topics/d3/ >D3</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-power-bi-5 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-power-bi-5 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|data science|power bi" }' data-gtm-event=mousedown href=/search/topics/power-bi/ >Power BI</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-tableau-6 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-tableau-6 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|data science|tableau" }' data-gtm-event=mousedown href=/search/topics/tableau/ >Tableau</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-statistics-7 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-statistics-7 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|data science|statistics" }' data-gtm-event=mousedown href=/search/topics/statistics/ >Statistics</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-exploratory-data-analysis-8 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-exploratory-data-analysis-8 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|data science|exploratory data analysis" }' data-gtm-event=mousedown href=/search/topics/exploratory-data-analysis/ >Exploratory Data Analysis</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-data-visualization-9 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-data-visualization-9 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|data science|data visualization" }' data-gtm-event=mousedown href=/search/topics/data-visualization/ >Data Visualization</a></li></ul><footer
class=orm-global-site-mobile-menu__footer><button
role=menuItem class=orm-global-site-mobile-menu__back-button aria-label="Back to previous menu" type=button data-back-button-for=orm-global-site-mobile-menu-drawer--mobile-data-science-2><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M15 16.7142C15 17.4465 14.3897 18 13.6295 18C13.2484 18 12.9211 17.8528 12.6718 17.6304L5.42447 10.9405L5.42017 10.9365C5.15388 10.6849 5 10.3615 5 9.99568C5 9.65583 5.14145 9.30318 5.43187 9.05271L12.6726 2.37726C12.9196 2.14511 13.2517 2 13.6295 2C14.3897 2 15 2.55348 15 3.28584C15 3.63671 14.8514 3.95598 14.6184 4.18983L14.6109 4.19737L8.33405 9.99593L14.6034 15.7956L14.6073 15.7993C14.8552 16.0335 15 16.3602 15 16.7142Z" fill=currentColor></path></svg>Back</button></footer></div></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-ai-ml-3 data-level=1><button
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-ai-ml-3 data-level=1 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-mobile-menu-drawer--mobile-ai-ml-3>AI &amp; ML<svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><div
class=orm-global-mobile-drawer hidden inert id=orm-global-site-mobile-menu-drawer--mobile-ai-ml-3 aria-labelledby=orm-global-site-mobile-menu__link--mobile-ai-ml-3 data-level=2><header
class=orm-global-site-mobile-menu__header><h3 class="orm-global-site-mobile-menu__title">AI &amp; ML</h3></header><ul
class=orm-global-site-mobile-menu role=menu data-level=2><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-generative-ai-0 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-generative-ai-0 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|ai &amp; ml|generative ai" }' data-gtm-event=mousedown href=/search/skills/generative-ai/ >Generative AI</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-machine-learning-1 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-machine-learning-1 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|ai &amp; ml|machine learning" }' data-gtm-event=mousedown href=/search/skills/machine-learning/ >Machine Learning</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-artificial-intelligence-ai-2 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-artificial-intelligence-ai-2 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|ai &amp; ml|artificial intelligence (ai)" }' data-gtm-event=mousedown href=/search/skills/artificial-intelligence-ai/ >Artificial Intelligence (AI)</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-deep-learning-3 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-deep-learning-3 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|ai &amp; ml|deep learning" }' data-gtm-event=mousedown href=/search/skills/deep-learning/ >Deep Learning</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-reinforcement-learning-4 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-reinforcement-learning-4 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|ai &amp; ml|reinforcement learning" }' data-gtm-event=mousedown href=/search/skills/reinforcement-learning/ >Reinforcement Learning</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-natural-language-processing-5 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-natural-language-processing-5 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|ai &amp; ml|natural language processing" }' data-gtm-event=mousedown href=/search/skills/natural-language-processing/ >Natural Language Processing</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-tensorflow-6 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-tensorflow-6 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|ai &amp; ml|tensorflow" }' data-gtm-event=mousedown href=/search/skills/tensorflow/ >TensorFlow</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-scikit-learn-7 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-scikit-learn-7 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|ai &amp; ml|scikit-learn" }' data-gtm-event=mousedown href=/search/skills/scikit-learn/ >Scikit-Learn</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-hyperparameter-tuning-8 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-hyperparameter-tuning-8 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|ai &amp; ml|hyperparameter tuning" }' data-gtm-event=mousedown href=/search/skills/hyperparameter-tuning/ >Hyperparameter Tuning</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-mlops-9 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-mlops-9 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|ai &amp; ml|mlops" }' data-gtm-event=mousedown href=/search/skills/mlops/ >MLOps</a></li></ul><footer
class=orm-global-site-mobile-menu__footer><button
role=menuItem class=orm-global-site-mobile-menu__back-button aria-label="Back to previous menu" type=button data-back-button-for=orm-global-site-mobile-menu-drawer--mobile-ai-ml-3><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M15 16.7142C15 17.4465 14.3897 18 13.6295 18C13.2484 18 12.9211 17.8528 12.6718 17.6304L5.42447 10.9405L5.42017 10.9365C5.15388 10.6849 5 10.3615 5 9.99568C5 9.65583 5.14145 9.30318 5.43187 9.05271L12.6726 2.37726C12.9196 2.14511 13.2517 2 13.6295 2C14.3897 2 15 2.55348 15 3.28584C15 3.63671 14.8514 3.95598 14.6184 4.18983L14.6109 4.19737L8.33405 9.99593L14.6034 15.7956L14.6073 15.7993C14.8552 16.0335 15 16.3602 15 16.7142Z" fill=currentColor></path></svg>Back</button></footer></div></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-programming-languages-4 data-level=1><button
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-programming-languages-4 data-level=1 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-mobile-menu-drawer--mobile-programming-languages-4>Programming Languages<svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><div
class=orm-global-mobile-drawer hidden inert id=orm-global-site-mobile-menu-drawer--mobile-programming-languages-4 aria-labelledby=orm-global-site-mobile-menu__link--mobile-programming-languages-4 data-level=2><header
class=orm-global-site-mobile-menu__header><h3 class="orm-global-site-mobile-menu__title">Programming Languages</h3></header><ul
class=orm-global-site-mobile-menu role=menu data-level=2><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-java-0 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-java-0 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|programming languages|java" }' data-gtm-event=mousedown href=/search/skills/java/ >Java</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-javascript-1 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-javascript-1 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|programming languages|javascript" }' data-gtm-event=mousedown href=/search/skills/javascript/ >JavaScript</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-spring-2 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-spring-2 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|programming languages|spring" }' data-gtm-event=mousedown href=/search/skills/spring/ >Spring</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-python-3 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-python-3 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|programming languages|python" }' data-gtm-event=mousedown href=/search/skills/python/ >Python</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-go-4 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-go-4 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|programming languages|go" }' data-gtm-event=mousedown href=/search/skills/go/ >Go</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-c-5 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-c-5 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|programming languages|c#" }' data-gtm-event=mousedown href=/search/skills/c-sharp/ >C#</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-c-6 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-c-6 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|programming languages|c++" }' data-gtm-event=mousedown href=/search/skills/c-plus-plus/ >C++</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-c-7 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-c-7 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|programming languages|c" }' data-gtm-event=mousedown href=/search/skills/c/ >C</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-swift-8 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-swift-8 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|programming languages|swift" }' data-gtm-event=mousedown href=/search/skills/swift/ >Swift</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-rust-9 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-rust-9 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|programming languages|rust" }' data-gtm-event=mousedown href=/search/skills/rust/ >Rust</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-functional-programming-10 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-functional-programming-10 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|programming languages|functional programming" }' data-gtm-event=mousedown href=/search/skills/functional-programming/ >Functional Programming</a></li></ul><footer
class=orm-global-site-mobile-menu__footer><button
role=menuItem class=orm-global-site-mobile-menu__back-button aria-label="Back to previous menu" type=button data-back-button-for=orm-global-site-mobile-menu-drawer--mobile-programming-languages-4><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M15 16.7142C15 17.4465 14.3897 18 13.6295 18C13.2484 18 12.9211 17.8528 12.6718 17.6304L5.42447 10.9405L5.42017 10.9365C5.15388 10.6849 5 10.3615 5 9.99568C5 9.65583 5.14145 9.30318 5.43187 9.05271L12.6726 2.37726C12.9196 2.14511 13.2517 2 13.6295 2C14.3897 2 15 2.55348 15 3.28584C15 3.63671 14.8514 3.95598 14.6184 4.18983L14.6109 4.19737L8.33405 9.99593L14.6034 15.7956L14.6073 15.7993C14.8552 16.0335 15 16.3602 15 16.7142Z" fill=currentColor></path></svg>Back</button></footer></div></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-software-architecture-5 data-level=1><button
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-software-architecture-5 data-level=1 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-mobile-menu-drawer--mobile-software-architecture-5>Software Architecture<svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><div
class=orm-global-mobile-drawer hidden inert id=orm-global-site-mobile-menu-drawer--mobile-software-architecture-5 aria-labelledby=orm-global-site-mobile-menu__link--mobile-software-architecture-5 data-level=2><header
class=orm-global-site-mobile-menu__header><h3 class="orm-global-site-mobile-menu__title">Software Architecture</h3></header><ul
class=orm-global-site-mobile-menu role=menu data-level=2><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-object-oriented-0 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-object-oriented-0 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|software architecture|object-oriented" }' data-gtm-event=mousedown href=/search/skills/object-oriented-architecture/ >Object-Oriented</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-distributed-systems-1 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-distributed-systems-1 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|software architecture|distributed systems" }' data-gtm-event=mousedown href=/search/skills/distributed-systems/ >Distributed Systems</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-domain-driven-design-2 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-domain-driven-design-2 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|software architecture|domain-driven design" }' data-gtm-event=mousedown href=/search/skills/domain-driven-design/ >Domain-Driven Design</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-architectural-patterns-3 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-architectural-patterns-3 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|software architecture|architectural patterns" }' data-gtm-event=mousedown href=/search/skills/architectural-patterns/ >Architectural Patterns</a></li></ul><footer
class=orm-global-site-mobile-menu__footer><button
role=menuItem class=orm-global-site-mobile-menu__back-button aria-label="Back to previous menu" type=button data-back-button-for=orm-global-site-mobile-menu-drawer--mobile-software-architecture-5><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M15 16.7142C15 17.4465 14.3897 18 13.6295 18C13.2484 18 12.9211 17.8528 12.6718 17.6304L5.42447 10.9405L5.42017 10.9365C5.15388 10.6849 5 10.3615 5 9.99568C5 9.65583 5.14145 9.30318 5.43187 9.05271L12.6726 2.37726C12.9196 2.14511 13.2517 2 13.6295 2C14.3897 2 15 2.55348 15 3.28584C15 3.63671 14.8514 3.95598 14.6184 4.18983L14.6109 4.19737L8.33405 9.99593L14.6034 15.7956L14.6073 15.7993C14.8552 16.0335 15 16.3602 15 16.7142Z" fill=currentColor></path></svg>Back</button></footer></div></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-itops-6 data-level=1><button
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-itops-6 data-level=1 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-mobile-menu-drawer--mobile-itops-6>IT/Ops<svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><div
class=orm-global-mobile-drawer hidden inert id=orm-global-site-mobile-menu-drawer--mobile-itops-6 aria-labelledby=orm-global-site-mobile-menu__link--mobile-itops-6 data-level=2><header
class=orm-global-site-mobile-menu__header><h3 class="orm-global-site-mobile-menu__title">IT/Ops</h3></header><ul
class=orm-global-site-mobile-menu role=menu data-level=2><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-kubernetes-0 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-kubernetes-0 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|it/ops|kubernetes" }' data-gtm-event=mousedown href=/search/topics/kubernetes/ >Kubernetes</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-docker-1 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-docker-1 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|it/ops|docker" }' data-gtm-event=mousedown href=/search/topics/docker/ >Docker</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-github-2 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-github-2 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|it/ops|github" }' data-gtm-event=mousedown href=/search/topics/github/ >GitHub</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-terraform-3 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-terraform-3 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|it/ops|terraform" }' data-gtm-event=mousedown href=/search/topics/terraform/ >Terraform</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-continuous-delivery-4 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-continuous-delivery-4 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|it/ops|continuous delivery" }' data-gtm-event=mousedown href=/search/topics/continuous-delivery/ >Continuous Delivery</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-continuous-integration-5 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-continuous-integration-5 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|it/ops|continuous integration" }' data-gtm-event=mousedown href=/search/topics/continuous-integration/ >Continuous Integration</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-database-administration-6 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-database-administration-6 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|it/ops|database administration" }' data-gtm-event=mousedown href=/search/topics/database-administration/ >Database Administration</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-computer-networking-7 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-computer-networking-7 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|it/ops|computer networking" }' data-gtm-event=mousedown href=/search/topics/computer-networking/ >Computer Networking</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-operating-systems-8 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-operating-systems-8 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|it/ops|operating systems" }' data-gtm-event=mousedown href=/search/topics/operating-systems/ >Operating Systems</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-it-certifications-9 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-it-certifications-9 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|it/ops|it certifications" }' data-gtm-event=mousedown href=/search/topics/it-certifications/ >IT Certifications</a></li></ul><footer
class=orm-global-site-mobile-menu__footer><button
role=menuItem class=orm-global-site-mobile-menu__back-button aria-label="Back to previous menu" type=button data-back-button-for=orm-global-site-mobile-menu-drawer--mobile-itops-6><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M15 16.7142C15 17.4465 14.3897 18 13.6295 18C13.2484 18 12.9211 17.8528 12.6718 17.6304L5.42447 10.9405L5.42017 10.9365C5.15388 10.6849 5 10.3615 5 9.99568C5 9.65583 5.14145 9.30318 5.43187 9.05271L12.6726 2.37726C12.9196 2.14511 13.2517 2 13.6295 2C14.3897 2 15 2.55348 15 3.28584C15 3.63671 14.8514 3.95598 14.6184 4.18983L14.6109 4.19737L8.33405 9.99593L14.6034 15.7956L14.6073 15.7993C14.8552 16.0335 15 16.3602 15 16.7142Z" fill=currentColor></path></svg>Back</button></footer></div></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-security-7 data-level=1><button
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-security-7 data-level=1 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-mobile-menu-drawer--mobile-security-7>Security<svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><div
class=orm-global-mobile-drawer hidden inert id=orm-global-site-mobile-menu-drawer--mobile-security-7 aria-labelledby=orm-global-site-mobile-menu__link--mobile-security-7 data-level=2><header
class=orm-global-site-mobile-menu__header><h3 class="orm-global-site-mobile-menu__title">Security</h3></header><ul
class=orm-global-site-mobile-menu role=menu data-level=2><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-network-security-0 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-network-security-0 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|security|network security" }' data-gtm-event=mousedown href=/search/skills/network-security/ >Network Security</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-application-security-1 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-application-security-1 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|security|application security" }' data-gtm-event=mousedown href=/search/skills/application-security/ >Application Security</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-incident-response-2 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-incident-response-2 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|security|incident response" }' data-gtm-event=mousedown href=/search/skills/incident-response/ >Incident Response</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-zero-trust-model-3 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-zero-trust-model-3 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|security|zero trust model" }' data-gtm-event=mousedown href=/search/skills/zero-trust-model/ >Zero Trust Model</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-disaster-recovery-4 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-disaster-recovery-4 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|security|disaster recovery" }' data-gtm-event=mousedown href=/search/skills/disaster-recovery/ >Disaster Recovery</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-penetration-testing-ethical-hacking-5 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-penetration-testing-ethical-hacking-5 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|security|penetration testing / ethical hacking" }' data-gtm-event=mousedown href=/search/skills/penetration-testing-ethical-hacking/ >Penetration Testing / Ethical Hacking</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-governance-6 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-governance-6 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|security|governance" }' data-gtm-event=mousedown href=/search/skills/governance/ >Governance</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-malware-7 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-malware-7 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|security|malware" }' data-gtm-event=mousedown href=/search/skills/malware/ >Malware</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-security-architecture-8 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-security-architecture-8 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|security|security architecture" }' data-gtm-event=mousedown href=/search/skills/security-architecture/ >Security Architecture</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-security-engineering-9 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-security-engineering-9 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|security|security engineering" }' data-gtm-event=mousedown href=/search/skills/security-engineering/ >Security Engineering</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-security-certifications-10 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-security-certifications-10 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|security|security certifications" }' data-gtm-event=mousedown href=/search/skills/security-certifications/ >Security Certifications</a></li></ul><footer
class=orm-global-site-mobile-menu__footer><button
role=menuItem class=orm-global-site-mobile-menu__back-button aria-label="Back to previous menu" type=button data-back-button-for=orm-global-site-mobile-menu-drawer--mobile-security-7><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M15 16.7142C15 17.4465 14.3897 18 13.6295 18C13.2484 18 12.9211 17.8528 12.6718 17.6304L5.42447 10.9405L5.42017 10.9365C5.15388 10.6849 5 10.3615 5 9.99568C5 9.65583 5.14145 9.30318 5.43187 9.05271L12.6726 2.37726C12.9196 2.14511 13.2517 2 13.6295 2C14.3897 2 15 2.55348 15 3.28584C15 3.63671 14.8514 3.95598 14.6184 4.18983L14.6109 4.19737L8.33405 9.99593L14.6034 15.7956L14.6073 15.7993C14.8552 16.0335 15 16.3602 15 16.7142Z" fill=currentColor></path></svg>Back</button></footer></div></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-design-8 data-level=1><button
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-design-8 data-level=1 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-mobile-menu-drawer--mobile-design-8>Design<svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><div
class=orm-global-mobile-drawer hidden inert id=orm-global-site-mobile-menu-drawer--mobile-design-8 aria-labelledby=orm-global-site-mobile-menu__link--mobile-design-8 data-level=2><header
class=orm-global-site-mobile-menu__header><h3 class="orm-global-site-mobile-menu__title">Design</h3></header><ul
class=orm-global-site-mobile-menu role=menu data-level=2><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-web-design-0 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-web-design-0 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|design|web design" }' data-gtm-event=mousedown href=/search/skills/web-design/ >Web Design</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-graphic-design-1 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-graphic-design-1 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|design|graphic design" }' data-gtm-event=mousedown href=/search/skills/graphic-design/ >Graphic Design</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-interaction-design-2 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-interaction-design-2 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|design|interaction design" }' data-gtm-event=mousedown href=/search/skills/interaction-design/ >Interaction Design</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-film-video-3 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-film-video-3 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|design|film &amp; video" }' data-gtm-event=mousedown href=/search/skills/film-video/ >Film &amp; Video</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-user-experience-ux-4 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-user-experience-ux-4 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|design|user experience (ux)" }' data-gtm-event=mousedown href=/search/skills/user-experience-ux/ >User Experience (UX)</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-design-process-5 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-design-process-5 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|design|design process" }' data-gtm-event=mousedown href=/search/skills/design-process/ >Design Process</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-design-tools-6 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-design-tools-6 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|design|design tools" }' data-gtm-event=mousedown href=/search/skills/design-tools/ >Design Tools</a></li></ul><footer
class=orm-global-site-mobile-menu__footer><button
role=menuItem class=orm-global-site-mobile-menu__back-button aria-label="Back to previous menu" type=button data-back-button-for=orm-global-site-mobile-menu-drawer--mobile-design-8><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M15 16.7142C15 17.4465 14.3897 18 13.6295 18C13.2484 18 12.9211 17.8528 12.6718 17.6304L5.42447 10.9405L5.42017 10.9365C5.15388 10.6849 5 10.3615 5 9.99568C5 9.65583 5.14145 9.30318 5.43187 9.05271L12.6726 2.37726C12.9196 2.14511 13.2517 2 13.6295 2C14.3897 2 15 2.55348 15 3.28584C15 3.63671 14.8514 3.95598 14.6184 4.18983L14.6109 4.19737L8.33405 9.99593L14.6034 15.7956L14.6073 15.7993C14.8552 16.0335 15 16.3602 15 16.7142Z" fill=currentColor></path></svg>Back</button></footer></div></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-business-9 data-level=1><button
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-business-9 data-level=1 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-mobile-menu-drawer--mobile-business-9>Business<svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><div
class=orm-global-mobile-drawer hidden inert id=orm-global-site-mobile-menu-drawer--mobile-business-9 aria-labelledby=orm-global-site-mobile-menu__link--mobile-business-9 data-level=2><header
class=orm-global-site-mobile-menu__header><h3 class="orm-global-site-mobile-menu__title">Business</h3></header><ul
class=orm-global-site-mobile-menu role=menu data-level=2><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-agile-0 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-agile-0 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|business|agile" }' data-gtm-event=mousedown href=/search/skills/agile/ >Agile</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-project-management-1 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-project-management-1 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|business|project management" }' data-gtm-event=mousedown href=/search/skills/project-management/ >Project Management</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-product-management-2 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-product-management-2 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|business|product management" }' data-gtm-event=mousedown href=/search/skills/product-management/ >Product Management</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-marketing-3 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-marketing-3 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|business|marketing" }' data-gtm-event=mousedown href=/search/skills/marketing/ >Marketing</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-human-resources-4 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-human-resources-4 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|business|human resources" }' data-gtm-event=mousedown href=/search/skills/human-resources/ >Human Resources</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-finance-5 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-finance-5 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|business|finance" }' data-gtm-event=mousedown href=/search/skills/finance/ >Finance</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-team-management-6 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-team-management-6 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|business|team management" }' data-gtm-event=mousedown href=/search/skills/team-management/ >Team Management</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-business-strategy-7 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-business-strategy-7 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|business|business strategy" }' data-gtm-event=mousedown href=/search/skills/business-strategy/ >Business Strategy</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-digital-transformation-8 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-digital-transformation-8 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|business|digital transformation" }' data-gtm-event=mousedown href=/search/skills/digital-transformation/ >Digital Transformation</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-organizational-leadership-9 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-organizational-leadership-9 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|business|organizational leadership" }' data-gtm-event=mousedown href=/search/skills/organizational-leadership/ >Organizational Leadership</a></li></ul><footer
class=orm-global-site-mobile-menu__footer><button
role=menuItem class=orm-global-site-mobile-menu__back-button aria-label="Back to previous menu" type=button data-back-button-for=orm-global-site-mobile-menu-drawer--mobile-business-9><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M15 16.7142C15 17.4465 14.3897 18 13.6295 18C13.2484 18 12.9211 17.8528 12.6718 17.6304L5.42447 10.9405L5.42017 10.9365C5.15388 10.6849 5 10.3615 5 9.99568C5 9.65583 5.14145 9.30318 5.43187 9.05271L12.6726 2.37726C12.9196 2.14511 13.2517 2 13.6295 2C14.3897 2 15 2.55348 15 3.28584C15 3.63671 14.8514 3.95598 14.6184 4.18983L14.6109 4.19737L8.33405 9.99593L14.6034 15.7956L14.6073 15.7993C14.8552 16.0335 15 16.3602 15 16.7142Z" fill=currentColor></path></svg>Back</button></footer></div></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-soft-skills-10 data-level=1><button
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-soft-skills-10 data-level=1 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-mobile-menu-drawer--mobile-soft-skills-10>Soft Skills<svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><div
class=orm-global-mobile-drawer hidden inert id=orm-global-site-mobile-menu-drawer--mobile-soft-skills-10 aria-labelledby=orm-global-site-mobile-menu__link--mobile-soft-skills-10 data-level=2><header
class=orm-global-site-mobile-menu__header><h3 class="orm-global-site-mobile-menu__title">Soft Skills</h3></header><ul
class=orm-global-site-mobile-menu role=menu data-level=2><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-professional-communication-0 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-professional-communication-0 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|soft skills|professional communication" }' data-gtm-event=mousedown href=/search/skills/professional-communication/ >Professional Communication</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-emotional-intelligence-1 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-emotional-intelligence-1 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|soft skills|emotional intelligence" }' data-gtm-event=mousedown href=/search/skills/emotional-intelligence/ >Emotional Intelligence</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-presentation-skills-2 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-presentation-skills-2 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|soft skills|presentation skills" }' data-gtm-event=mousedown href=/search/skills/presentation-skills/ >Presentation Skills</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-innovation-3 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-innovation-3 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|soft skills|innovation" }' data-gtm-event=mousedown href=/search/skills/innovation/ >Innovation</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-critical-thinking-4 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-critical-thinking-4 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|soft skills|critical thinking" }' data-gtm-event=mousedown href=/search/skills/critical-thinking/ >Critical Thinking</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-public-speaking-5 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-public-speaking-5 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|soft skills|public speaking" }' data-gtm-event=mousedown href=/search/skills/public-speaking/ >Public Speaking</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-collaboration-6 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-collaboration-6 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|soft skills|collaboration" }' data-gtm-event=mousedown href=/search/skills/collaboration/ >Collaboration</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-personal-productivity-7 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-personal-productivity-7 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|soft skills|personal productivity" }' data-gtm-event=mousedown href=/search/skills/personal-productivity/ >Personal Productivity</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-confidence-motivation-8 data-level=2><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-confidence-motivation-8 data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"explore skills|soft skills|confidence / motivation" }' data-gtm-event=mousedown href=/search/skills/confidence-motivation/ >Confidence / Motivation</a></li></ul><footer
class=orm-global-site-mobile-menu__footer><button
role=menuItem class=orm-global-site-mobile-menu__back-button aria-label="Back to previous menu" type=button data-back-button-for=orm-global-site-mobile-menu-drawer--mobile-soft-skills-10><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M15 16.7142C15 17.4465 14.3897 18 13.6295 18C13.2484 18 12.9211 17.8528 12.6718 17.6304L5.42447 10.9405L5.42017 10.9365C5.15388 10.6849 5 10.3615 5 9.99568C5 9.65583 5.14145 9.30318 5.43187 9.05271L12.6726 2.37726C12.9196 2.14511 13.2517 2 13.6295 2C14.3897 2 15 2.55348 15 3.28584C15 3.63671 14.8514 3.95598 14.6184 4.18983L14.6109 4.19737L8.33405 9.99593L14.6034 15.7956L14.6073 15.7993C14.8552 16.0335 15 16.3602 15 16.7142Z" fill=currentColor></path></svg>Back</button></footer></div></li></ul><footer
class=orm-global-site-mobile-menu__footer><button
role=menuItem class=orm-global-site-mobile-menu__back-button aria-label="Back to previous menu" type=button data-back-button-for=orm-global-site-mobile-menu-drawer--mobile-explore-skills-0><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M15 16.7142C15 17.4465 14.3897 18 13.6295 18C13.2484 18 12.9211 17.8528 12.6718 17.6304L5.42447 10.9405L5.42017 10.9365C5.15388 10.6849 5 10.3615 5 9.99568C5 9.65583 5.14145 9.30318 5.43187 9.05271L12.6726 2.37726C12.9196 2.14511 13.2517 2 13.6295 2C14.3897 2 15 2.55348 15 3.28584C15 3.63671 14.8514 3.95598 14.6184 4.18983L14.6109 4.19737L8.33405 9.99593L14.6034 15.7956L14.6073 15.7993C14.8552 16.0335 15 16.3602 15 16.7142Z" fill=currentColor></path></svg>Back</button></footer></div></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-features-1 data-level=0><button
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-features-1 data-level=0 aria-expanded=false aria-haspopup=true aria-controls=orm-global-site-mobile-menu-drawer--mobile-features-1>Features<svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=currentColor></path></svg></button><div
class=orm-global-mobile-drawer hidden inert id=orm-global-site-mobile-menu-drawer--mobile-features-1 aria-labelledby=orm-global-site-mobile-menu__link--mobile-features-1 data-level=1><header
class=orm-global-site-mobile-menu__header><h3 class="orm-global-site-mobile-menu__title">Features</h3></header><ul
class=orm-global-site-mobile-menu role=menu data-level=1><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-all-features-0 data-level=1><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-all-features-0 href=/online-learning/features.html>All features</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-verifiable-skills-1 data-level=1><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-verifiable-skills-1 href=/online-learning/verifiable-skills.html>Verifiable skills</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-academies-2 data-level=1><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-academies-2 href=/online-learning/academies.html>Academies</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-courses-3 data-level=1><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-courses-3 href=/online-learning/courses.html>Courses</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-certifications-4 data-level=1><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-certifications-4 href=/online-learning/feature-certification.html>Certifications</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-interactive-learning-5 data-level=1><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-interactive-learning-5 href=/online-learning/intro-interactive-learning.html>Interactive learning</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-live-events-6 data-level=1><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-live-events-6 href=/online-learning/live-events.html>Live events</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-superstreams-7 data-level=1><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-superstreams-7 href=/products/superstreams.html>Superstreams</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-answers-8 data-level=1><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-answers-8 href=/online-learning/feature-answers.html>Answers</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-insights-reporting-9 data-level=1><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-insights-reporting-9 href=/online-learning/insights-dashboard.html>Insights reporting</a></li></ul><footer
class=orm-global-site-mobile-menu__footer><button
role=menuItem class=orm-global-site-mobile-menu__back-button aria-label="Back to previous menu" type=button data-back-button-for=orm-global-site-mobile-menu-drawer--mobile-features-1><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M15 16.7142C15 17.4465 14.3897 18 13.6295 18C13.2484 18 12.9211 17.8528 12.6718 17.6304L5.42447 10.9405L5.42017 10.9365C5.15388 10.6849 5 10.3615 5 9.99568C5 9.65583 5.14145 9.30318 5.43187 9.05271L12.6726 2.37726C12.9196 2.14511 13.2517 2 13.6295 2C14.3897 2 15 2.55348 15 3.28584C15 3.63671 14.8514 3.95598 14.6184 4.18983L14.6109 4.19737L8.33405 9.99593L14.6034 15.7956L14.6073 15.7993C14.8552 16.0335 15 16.3602 15 16.7142Z" fill=currentColor></path></svg>Back</button></footer></div></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-radar-blog-2 data-level=0><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-radar-blog-2 href=/radar/ >Radar Blog</a></li><li
class=orm-global-site-mobile-menu__item role=presentation id=orm-global-site-menu-item--mobile-live-3 data-level=0><a
class=orm-global-site-mobile-menu__link role=menuitem id=orm-global-site-mobile-menu__link--mobile-live-3 href=/live/ >Live</a></li></ul><hr
class=orm-global-site-menu__divider><ul
class=orm-global-site-mobile-menu role=menu>
<li
class=orm-global-site-mobile-menu__item role=presentation><a
role=menuitem class=orm-global-site-mobile-menu__link data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"plans" }' data-gtm-event=mousedown href=https://www.oreilly.com/online-learning/pricing.html>Plans</a></li><li
class=orm-global-site-mobile-menu__item data-hidden=auth role=presentation><a
role=menuitem class=orm-global-site-mobile-menu__link data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"sign in" }' data-gtm-event=mousedown href="https://www.oreilly.com/member/login/?next=%2Fcontent%2Fwhats-in-a-transport-layer%2F%3Fcmp%3Dtw-webops-na-article-vleu17_transport_layer_vleu_kb">Sign In</a></li><li
class=orm-global-site-mobile-menu__item data-hidden=auth role=presentation><a
role=menuitem class="orm-global-site-mobile-menu__link orm-global-site--link-as-button" data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"try now" }' data-gtm-event=mousedown href=https://www.oreilly.com/online-learning/try-now.html>Try Now<svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=inherit></path></svg></a></li><li
class="menu__item menu-item" data-hidden=notauth><a
role=menuitem class="orm-global-site-mobile-menu__link orm-global-site--link-as-button" data-gtm='{ "eventCat":"marketing", "eventAct":"nav", "eventLbl":"oreilly platform" }' data-gtm-event=mousedown href=https://www.oreilly.com/member/login/ >O'Reilly Platform<svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 20 20" fill=none><path
d="M5.5 16.7142C5.5 17.4465 6.11034 18 6.87045 18C7.25163 18 7.57887 17.8528 7.82823 17.6304L15.0755 10.9405L15.0798 10.9365C15.3461 10.6849 15.5 10.3615 15.5 9.99568C15.5 9.65583 15.3585 9.30318 15.0681 9.05271L7.82738 2.37726C7.58041 2.14511 7.24835 2 6.87045 2C6.11034 2 5.5 2.55348 5.5 3.28584C5.5 3.63671 5.64856 3.95598 5.88158 4.18983L5.88909 4.19737L12.166 9.99593L5.89664 15.7956L5.89275 15.7993C5.64484 16.0335 5.5 16.3602 5.5 16.7142Z" fill=inherit></path></svg></a></li></ul></nav><div
class=orm-global-mobile-pane aria-hidden=true inert hidden id=orm-global-mobile-pane--search data-testid=mobile-search-pane><form
class=orm-global-site-search-form data-gtm='{ "eventCat":"global nav", "eventAct":"navigation", "eventLbl":"keyboard|enter" }' data-gtm-event=submit id=orm-global-site-search-form--mobile action=https://www.oreilly.com/search/ method=get><div
class=orm-global-site-search-icon><svg
class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium css-1s0hah4" focusable=false aria-hidden=true viewBox="0 0 12 12" fill=none><path
fill-rule=evenodd clip-rule=evenodd d="M10.6645 12L6.2575 7.59302L7.59302 6.2575L12 10.6645L10.6645 12Z" fill=currentColor></path><path
fill-rule=evenodd clip-rule=evenodd d="M4.5 9C6.98528 9 9 6.98528 9 4.5C9 2.01472 6.98528 0 4.5 0C2.01472 0 0 2.01472 0 4.5C0 6.98528 2.01472 9 4.5 9ZM7 4.5C7 5.88071 5.88071 7 4.5 7C3.11929 7 2 5.88071 2 4.5C2 3.11929 3.11929 2 4.5 2C5.88071 2 7 3.11929 7 4.5Z" fill=currentColor></path></svg></div><label
class=orm-global-site-search-label><span
class=orm-global-site-search-label__text>Search for books, courses, events, and more</span><input
class=orm-global-site-search-input type=search placeholder="Search for books, courses, events, and more" name=q></label></form></div><div
class=headerBranding><div
class=content>
<a
class=hero-content href=/content/ title=Content></a>
<button
id=themeToggle class=themeToggle aria-pressed=false>
<span
class=srOnly>Toggle dark mode</span>
<span
class=dark></span>
<span
class=light></span>
</button></div></div><main
role=main id=maincontent> <script type=application/ld+json>{
"@context": "https://schema.org",
"@type": "BlogPosting",
"@id": "https://www.oreilly.com/content/whats-in-a-transport-layer/#BlogPosting",
"mainEntityOfPage": "https://www.oreilly.com/content/whats-in-a-transport-layer/",
"headline": "What&#8217;s in a transport layer?",
"description": "Microservices are small programs, each with a specific and narrow scope, that are glued together to produce what appears from the outside to be one coherent web application. This architectural style is used in contrast with a traditional “monolith” where every component and sub-routine of the application is bundled into one codebase and not separated …",
"image": {
"@type": "ImageObject",
"url": "https://www.oreilly.com/content/wp-content/uploads/sites/2/2020/01/traffic-light-2681107_1920-3ea5a0b7151a35eb14612c78c9ff761c-1024x683.jpg"
},
"author": [
{"@type": "Person", "name": "Nathan LeClaire", "url": "https://www.oreilly.com/people/nathan-leclaire/"} ],
"publisher": {
"@type": "Organization",
"name": "O'Reilly Media",
"url": "https://www.oreilly.com/",
"logo": {
"@type": "ImageObject",
"url": "https://cdn.oreillystatic.com/images/sitewide-headers/oreilly_logo_mark_red.svg",
"width": 200,
"height": 50
}
},
"datePublished": "2017-09-19",
"dateModified": "2017-09-19",
"wordCount": "1515",
"timeRequired": "PT8M",
"keywords": [],
"genre": ["Operations"],
"isPartOf": {
"@type": "Blog",
"name": "O'Reilly Radar",
"url": "https://www.oreilly.com/radar/"
},
"potentialAction": {
"@type": "ViewAction",
"target": "https://www.oreilly.com/content/whats-in-a-transport-layer/",
"name": "Read Full Article"
}
}</script> <div
class=pageLayout><div
class=sidebar id=right-rail><div
class="module open"><form
id=searchForm class=search role=search method=get action=https://www.oreilly.com/content/ >
<input
type=search name=s placeholder=Search value></form><div
class=topics>
<a
href=/radar/topics/ai-ml/ class=topicChip data-ga-event-name=eventTracker data-ga-category=radar data-ga-event=topic data-ga-label="ai & ml">AI &amp; ML</a>
<a
href=/radar/topics/business/ class=topicChip data-ga-event-name=eventTracker data-ga-category=radar data-ga-event=topic data-ga-label=business>Business</a>
<a
href=/radar/topics/data/ class=topicChip data-ga-event-name=eventTracker data-ga-category=radar data-ga-event=topic data-ga-label=data>Data</a>
<a
href=/radar/topics/innovation-and-disruption/ class=topicChip data-ga-event-name=eventTracker data-ga-category=radar data-ga-event=topic data-ga-label=innovation>Innovation</a>
<a
href=/radar/tag/research/ class=topicChip data-ga-event-name=eventTracker data-ga-category=radar data-ga-event=topic data-ga-label=research>Research</a>
<a
href=/radar/topics/security/ class=topicChip data-ga-event-name=eventTracker data-ga-category=radar data-ga-event=topic data-ga-label=security>Security</a></div></div><div
class="module mobileMove"><h2>Try the O’Reilly learning platform</h2><p>With the O’Reilly learning platform, you get the resources and guidance to keep your skills sharp and stay ahead. Try it free for up to 14 days.</p><a
href="https://www.oreilly.com/start-trial/?type=team" class=ctaLink data-ga-event-name=eventTracker data-ga-category=radar data-ga-event=promo data-ga-label="start trial">Start trial</a></div><div
class="module mobileMove"><h2>Try a course for free</h2><p>Join a live online event on the O’Reilly platform to learn from the experts shaping tech.</p><a
href=https://www.oreilly.com/live/free.html class=ctaLink data-ga-event-name=eventTracker data-ga-category=radar data-ga-event="live event" data-ga-label="see whats coming soon">See what’s coming soon</a></div><div
class="module mobileMove"><link
rel=stylesheet type=text/css
href=https://www.oreilly.com/content/wp-content/themes/signal/files/marketing-cloud-subscribe-20220726.css><form
id=marketingCloudForm class=mc-form action=https://cl.exct.net/DEManager.aspx name=subscribeForm
method=post><h2>Get the Radar Trends newsletter</h2><input
type=hidden name=_clientID value=7200351>
<input
type=hidden name=_deExternalKey value=3559B084-4962-47D6-AD05-DAA2DE51CF45>
<input
type=hidden name=_action value=add>
<input
type=hidden name=_returnXML value=0>
<input
type=hidden name=_successURL value="https://www.oreilly.com/radar/?success=true">
<input
type=hidden name=_errorURL value="https://www.oreilly.com/radar/?error=true">
<input
type=hidden name=NewsletterTopic value=RadarTrends>
<input
type=hidden name=Marketing_Context value="email signup at https://www.oreilly.com/emails/newsletters/"><div
id=marketingCloudForm-errorMessage class=mc-form-errorMessage></div><div
class=mc-form-group><div
class=mc-form-item><label
for=emailaddress>Your email</label><input
type=email name=emailaddress
id=emailaddress data-text="email address" autocomplete=email aria-required=true></div><div
class=mc-form-item>
<label
for=country>Country</label>
<select
name=country id=country data-text=country autocomplete=country-name aria-required=true><option
value>- Select country -</option><option
value="United States">United States</option><option
value=Afghanistan>Afghanistan</option><option
value=Albania>Albania</option><option
value=Algeria>Algeria</option><option
value=Andorra>Andorra</option><option
value=Angola>Angola</option><option
value="Antigua and Barbuda">Antigua and Barbuda</option><option
value=Argentina>Argentina</option><option
value=Armenia>Armenia</option><option
value=Aruba>Aruba</option><option
value=Australia>Australia</option><option
value=Austria>Austria</option><option
value=Azerbaijan>Azerbaijan</option><option
value=Bahamas>The Bahamas</option><option
value=Bahrain>Bahrain</option><option
value=Bangladesh>Bangladesh</option><option
value=Barbados>Barbados</option><option
value=Belarus>Belarus</option><option
value=Belgium>Belgium</option><option
value=Belize>Belize</option><option
value=Benin>Benin</option><option
value=Bermuda>Bermuda</option><option
value=Bhutan>Bhutan</option><option
value="Bolivia, Plurinational State of">Bolivia</option><option
value="Bosnia and Herzegovina">Bosnia and Herzegovina</option><option
value=Botswana>Botswana</option><option
value=Brazil>Brazil</option><option
value="Brunei Darussalam">Brunei</option><option
value=Bulgaria>Bulgaria</option><option
value="Burkina Faso">Burkina Faso</option><option
value=Burundi>Burundi</option><option
value=Cambodia>Cambodia</option><option
value=Cameroon>Cameroon</option><option
value=Canada>Canada</option><option
value="Cape Verde">Cape Verde</option><option
value="Central African Republic">Central African Republic</option><option
value=Chad>Chad</option><option
value=Chile>Chile</option><option
value=China>People's Republic of China</option><option
value=Colombia>Colombia</option><option
value=Comoros>Comoros</option><option
value=Congo>Congo, Republic of the</option><option
value="Congo, the Democratic Republic of the">Congo, Democratic Republic of the</option><option
value="Cook Islands">Cook Islands</option><option
value="Costa Rica">Costa Rica</option><option
value="Cote d'Ivoire">C&ocirc;te d'Ivoire (Ivory Coast)</option><option
value=Croatia>Croatia</option><option
value=Cuba>Cuba</option><option
value=Cyprus>Cyprus</option><option
value="Czech Republic">Czechia</option><option
value=Denmark>Denmark</option><option
value=Djibouti>Djibouti</option><option
value=Dominica>Dominica</option><option
value="Dominican Republic">Dominican Republic</option><option
value=Ecuador>Ecuador</option><option
value=Egypt>Egypt</option><option
value="El Salvador">El Salvador</option><option
value="Equatorial Guinea">Equatorial Guinea</option><option
value=Eritrea>Eritrea</option><option
value=Estonia>Estonia</option><option
value=Swaziland>Eswatini (formerly Swaziland)</option><option
value=Ethiopia>Ethiopia</option><option
value="Federated States of Micronesia">Federated States of Micronesia</option><option
value=Fiji>Fiji</option><option
value=Finland>Finland</option><option
value=France>France</option><option
value=Gabon>Gabon</option><option
value=Gambia>The Gambia</option><option
value=Georgia>Georgia</option><option
value=Germany>Germany</option><option
value=Ghana>Ghana</option><option
value=Greece>Greece</option><option
value=Grenada>Grenada</option><option
value=Guatemala>Guatemala</option><option
value=Guinea>Guinea</option><option
value=Guinea-Bissau>Guinea-Bissau</option><option
value=Guyana>Guyana</option><option
value=Haiti>Haiti</option><option
value=Honduras>Honduras</option><option
value=Hungary>Hungary</option><option
value=Iceland>Iceland</option><option
value=India>India</option><option
value=Indonesia>Indonesia</option><option
value="Iran, Islamic Republic of">Iran</option><option
value=Iraq>Iraq</option><option
value=Ireland>Ireland</option><option
value=Israel>Israel</option><option
value=Italy>Italy</option><option
value=Jamaica>Jamaica</option><option
value=Japan>Japan</option><option
value=Jordan>Jordan</option><option
value=Kazakhstan>Kazakhstan</option><option
value=Kenya>Kenya</option><option
value=Kiribati>Kiribati</option><option
value="Korea, Democratic People's Republic of">Korea, Democratic People's Republic of</option><option
value="Korea, Republic of">Korea, Republic of</option><option
value=Kuwait>Kuwait</option><option
value=Kyrgyzstan>Kyrgyzstan</option><option
value="Lao People's Democratic Republic">Laos</option><option
value=Latvia>Latvia</option><option
value=Lebanon>Lebanon</option><option
value=Lesotho>Lesotho</option><option
value=Liberia>Liberia</option><option
value="Libyan Arab Jamahiriya">Libya</option><option
value=Liechtenstein>Liechtenstein</option><option
value=Lithuania>Lithuania</option><option
value=Luxembourg>Luxembourg</option><option
value="Macedonia, the former Yugoslav Republic of">Macedonia, Republic of</option><option
value=Madagascar>Madagascar</option><option
value=Malawi>Malawi</option><option
value=Malaysia>Malaysia</option><option
value=Maldives>Maldives</option><option
value=Mali>Mali</option><option
value=Malta>Malta</option><option
value=Mauritania>Mauritania</option><option
value=Mauritius>Mauritius</option><option
value=Mexico>Mexico</option><option
value="Moldova, Republic of">Moldova</option><option
value=Monaco>Monaco</option><option
value=Mongolia>Mongolia</option><option
value=Montenegro>Montenegro</option><option
value=Morocco>Morocco</option><option
value=Mozambique>Mozambique</option><option
value=Myanmar>Myanmar</option><option
value=Namibia>Namibia</option><option
value=Nauru>Nauru</option><option
value=Nepal>Nepal</option><option
value=Netherlands>Netherlands</option><option
value="New Zealand">New Zealand</option><option
value=Nicaragua>Nicaragua</option><option
value=Niger>Niger</option><option
value=Nigeria>Nigeria</option><option
value=Niue>Niue</option><option
value=Norway>Norway</option><option
value=Oman>Oman</option><option
value=Pakistan>Pakistan</option><option
value="Palestinian Territory, Occupied">Palestine, State of</option><option
value=Panama>Panama</option><option
value="Papua New Guinea">Papua New Guinea</option><option
value=Paraguay>Paraguay</option><option
value=Peru>Peru</option><option
value=Philippines>Philippines</option><option
value=Poland>Poland</option><option
value=Portugal>Portugal</option><option
value=Qatar>Qatar</option><option
value=Romania>Romania</option><option
value="Russian Federation">Russia</option><option
value=Rwanda>Rwanda</option><option
value="Saint Kitts and Nevis">Saint Kitts and Nevis</option><option
value="Saint Lucia">Saint Lucia</option><option
value="Saint Vincent and the Grenadines">Saint Vincent and the Grenadines</option><option
value=Samoa>Samoa</option><option
value="San Marino">San Marino</option><option
value="Sao Tome and Principe">S&atilde;o Tom&eacute; and Pr&iacute;ncipe</option><option
value="Saudi Arabia">Saudi Arabia</option><option
value=Senegal>Senegal</option><option
value=Serbia>Serbia</option><option
value=Seychelles>Seychelles</option><option
value="Sierra Leone">Sierra Leone</option><option
value=Singapore>Singapore</option><option
value=Slovakia>Slovakia</option><option
value=Slovenia>Slovenia</option><option
value="Solomon Islands">Solomon Islands</option><option
value=Somalia>Somalia</option><option
value="South Africa">South Africa</option><option
value="South Sudan">South Sudan</option><option
value=Spain>Spain</option><option
value="Sri Lanka">Sri Lanka</option><option
value=Sudan>Sudan</option><option
value=Suriname>Suriname</option><option
value=Sweden>Sweden</option><option
value=Switzerland>Switzerland</option><option
value="Syrian Arab Republic">Syria</option><option
value="Chinese Taipei">Taiwan</option><option
value=Tajikistan>Tajikistan</option><option
value="Tanzania, United Republic of">Tanzania</option><option
value=Thailand>Thailand</option><option
value=Timor-Leste>Timor-Leste (East Timor)</option><option
value=Togo>Togo</option><option
value=Tonga>Tonga</option><option
value="Trinidad and Tobago">Trinidad and Tobago</option><option
value=Tunisia>Tunisia</option><option
value=Turkey>Turkey</option><option
value=Turkmenistan>Turkmenistan</option><option
value=Tuvalu>Tuvalu</option><option
value=Uganda>Uganda</option><option
value=Ukraine>Ukraine</option><option
value="United Arab Emirates">United Arab Emirates</option><option
value="United Kingdom">United Kingdom</option><option
value="United States">United States</option><option
value=Uruguay>Uruguay</option><option
value=Uzbekistan>Uzbekistan</option><option
value=Vanuatu>Vanuatu</option><option
value="Holy See (Vatican City State)">Vatican City</option><option
value="Venezuela, Bolivarian Republic of">Venezuela</option><option
value="Viet Nam">Vietnam</option><option
value=Yemen>Yemen</option><option
value=Zambia>Zambia</option><option
value=Zimbabwe>Zimbabwe</option>
</select></div><div
class=mc-form-item><div
class="consentGroup hidden" id=consentGroup></div></div><div
class=mc-form-item><button
type=submit onclick="return verifMCForm();">Subscribe</button></div><div
class=mc-form-item><p
class=privacy>Please read our <a
href=https://oreilly.com/oreilly/privacy.html target=_blank>privacy policy</a>.</p></div></div></form><div
id=marketingCloudForm-thankyou class="marketingCloudForm-thankyou hidden"><h2>Thank you for subscribing to the O’Reilly Radar Trends to Watch newsletter.</h2></div> <script src=https://cdn.oreillystatic.com/assets/js/marketingCloudForm-20250502.js></script> <script src=https://www.oreilly.com/content/wp-content/cache/minify/2/52453.js></script> </div></div><div
class=blogPost><div
class=pageHeader><p
class=breadcrumbs>
<a
href=https://www.oreilly.com/content>Content</a>
&gt; <a
href=https://www.oreilly.com/content/topics/ >Topics</a></p><div
class=pageHeaderContent><div
class=title><h1>What&#8217;s in a transport layer?</h1><div
class=description><p>Understanding gRPC in the dawn of microservices.</p></div></div><div
class=radar-post-page-meta><p
class=text>
<span
class=radar-post-page-author>
By <a
href=https://www.oreilly.com/people/nathan-leclaire/ >Nathan LeClaire</a> </span><span
class=radar-post-page-date>September 19, 2017 &bull; 8 minute read</span></p></div><div
class=radar-post-page-actions>
<button
class=share id=share><span
class=icon></span><span
class=text>Share</span></button><div
class=shareOverlay id=shareOverlay><div
class=shareItems id=shareItems>
<button
class=close><span
class=reader>Close</span></button><a
href="https://www.linkedin.com/feed/?shareActive=true&text=O%27Reilly%20-%20What%27s%20in%20a%20transport%20layer%3F%20with%20Nathan%20LeClaire%20-%20https%3A%2F%2Fwww.oreilly.com%2Fcontent%2Fwhats-in-a-transport-layer%2F" class=linkedin rel="noopener nofollow noreferrer" aria-label="Share on LinkedIn" target=_blank data-gtm="{ &quot;eventCat&quot;:&quot;marketing&quot;, &quot;eventAct&quot;:&quot;share&quot;, &quot;eventLbl&quot;:&quot;linkedin&quot; }" data-gtm-event=mousedown><span
class=reader>LinkedIn</span></a><a
href="https://x.com/intent/tweet?original_referer=https%3A%2F%2Fwww.oreilly.com%2F&text=O%27Reilly%20-%20What%27s%20in%20a%20transport%20layer%3F%20with%20Nathan%20LeClaire%20-%20https%3A%2F%2Fwww.oreilly.com%2Fcontent%2Fwhats-in-a-transport-layer%2F" class=x rel="noopener nofollow noreferrer" aria-label="Share on X" target=_blank data-gtm="{ &quot;eventCat&quot;:&quot;marketing&quot;, &quot;eventAct&quot;:&quot;share&quot;, &quot;eventLbl&quot;:&quot;x&quot; }" data-gtm-event=mousedown><span
class=reader>X</span></a><a
href="https://www.facebook.com/sharer/sharer.php?quote=O%27Reilly%20-%20What%27s%20in%20a%20transport%20layer%3F%20with%20Nathan%20LeClaire%20-%20https%3A%2F%2Fwww.oreilly.com%2Fcontent%2Fwhats-in-a-transport-layer%2F" class=facebook rel="noopener nofollow noreferrer" aria-label="Share on Facebook" target=_blank data-gtm="{ &quot;eventCat&quot;:&quot;marketing&quot;, &quot;eventAct&quot;:&quot;share&quot;, &quot;eventLbl&quot;:&quot;facebook&quot; }" data-gtm-event=mousedown><span
class=reader>Facebook</span></a><a
href="https://threads.net/intent/post?text=O%27Reilly%20-%20What%27s%20in%20a%20transport%20layer%3F%20with%20Nathan%20LeClaire%20-%20https%3A%2F%2Fwww.oreilly.com%2Fcontent%2Fwhats-in-a-transport-layer%2F" class=threads rel="noopener nofollow noreferrer" aria-label="Share on Threads" target=_blank data-gtm="{ &quot;eventCat&quot;:&quot;marketing&quot;, &quot;eventAct&quot;:&quot;share&quot;, &quot;eventLbl&quot;:&quot;threads&quot; }" data-gtm-event=mousedown><span
class=reader>Threads</span></a><a
href="https://bsky.app/intent/compose?text=O%27Reilly%20-%20What%27s%20in%20a%20transport%20layer%3F%20with%20Nathan%20LeClaire%20-%20https%3A%2F%2Fwww.oreilly.com%2Fcontent%2Fwhats-in-a-transport-layer%2F" class=bluesky rel="noopener nofollow noreferrer" aria-label="Share on Bluesky" target=_blank data-gtm="{ &quot;eventCat&quot;:&quot;marketing&quot;, &quot;eventAct&quot;:&quot;share&quot;, &quot;eventLbl&quot;:&quot;bluesky&quot; }" data-gtm-event=mousedown><span
class=reader>Bluesky</span></a><a
href="https://www.reddit.com/submit?url=https%3A%2F%2Fwww.oreilly.com%2Fcontent%2Fwhats-in-a-transport-layer%2F&title=O%27Reilly%20Radar%20-%20What%27s%20in%20a%20transport%20layer%3F" class=reddit rel="noopener nofollow noreferrer" aria-label="Share on Reddit" target=_blank data-gtm="{ &quot;eventCat&quot;:&quot;marketing&quot;, &quot;eventAct&quot;:&quot;share&quot;, &quot;eventLbl&quot;:&quot;reddit&quot; }" data-gtm-event=mousedown><span
class=reader>Reddit</span></a></div></div> <script>// Show share overlay when share button is clicked
document.getElementById('share').addEventListener('click', (e) => {
shareItems.classList.remove('hidden');
shareOverlay.classList.add('over');
document.querySelector('body').classList.add('fixed');
});
function hideShareOverlay() {
shareOverlay.classList.remove('over');
shareItems.classList.add('hidden');
document.querySelector('body').classList.remove('fixed');
}
const shareItemsClose = shareItems.querySelector('.close');
shareItemsClose.addEventListener('click', (e) => {
hideShareOverlay();
});
shareOverlay.addEventListener('click', (e) => {
hideShareOverlay();
});
shareItems.addEventListener('click', (e) => {
e.stopPropagation();
});</script> </div></div></div><section
class="postContent "><div
id=post-featured-image class=featuredImage>
<img
width=1920 height=1280 src=https://www.oreilly.com/content/wp-content/uploads/sites/2/2020/01/traffic-light-2681107_1920-3ea5a0b7151a35eb14612c78c9ff761c.jpg class="attachment- size- wp-post-image" alt="Traffic Light" large decoding=async fetchpriority=high srcset="https://www.oreilly.com/content/wp-content/uploads/sites/2/2020/01/traffic-light-2681107_1920-3ea5a0b7151a35eb14612c78c9ff761c.jpg 1920w, https://www.oreilly.com/content/wp-content/uploads/sites/2/2020/01/traffic-light-2681107_1920-3ea5a0b7151a35eb14612c78c9ff761c-300x200.jpg 300w, https://www.oreilly.com/content/wp-content/uploads/sites/2/2020/01/traffic-light-2681107_1920-3ea5a0b7151a35eb14612c78c9ff761c-1024x683.jpg 1024w, https://www.oreilly.com/content/wp-content/uploads/sites/2/2020/01/traffic-light-2681107_1920-3ea5a0b7151a35eb14612c78c9ff761c-768x512.jpg 768w, https://www.oreilly.com/content/wp-content/uploads/sites/2/2020/01/traffic-light-2681107_1920-3ea5a0b7151a35eb14612c78c9ff761c-1536x1024.jpg 1536w" sizes="(min-width: 1024px) 800px, 100vw">
<span
class=caption>
Traffic Light <span
class=source-name>(source: <a
class=secondary target=_blank href=https://pixabay.com/en/traffic-light-dark-night-2681107/ rel="noopener noreferrer">Bertsz</a>)</span> </span></div><div
class=postContent-content id=postContent-content><aside
class="post-note post-note-intro"><p><a
href="https://conferences.oreilly.com/velocity/vl-eu/public/schedule/detail/61355?intcmp=il-webops-confsched-article-vleu17_newsite_whats_in_a_transport_layer_top">Learn how to rewrite monoliths into microservices</a> at the O’Reilly Velocity Conference, taking place in London Oct. 17-20. Use code ORM20 to save 20% on your conference pass (Gold, Silver, and Bronze passes).</p></aside><p>Microservices are small programs, each with a specific and narrow scope, that are glued together to produce what appears from the outside to be one coherent web application. This architectural style is used in contrast with a traditional &#8220;monolith&#8221; where every component and sub-routine of the application is bundled into one codebase and not separated by a network boundary. In recent years microservices have enjoyed increased popularity, concurrent with (but not necessarily requiring the use of) enabling new technologies such as <a
href=https://aws.amazon.com/ >Amazon Web Services</a> and <a
href=https://docker.com/ >Docker</a>. In this article, we will take a look at the &#8220;what&#8221; and &#8220;why&#8221; of microservices and at gRPC, an open source framework released by Google, which is a tool organizations are increasingly reaching for in their migration towards microservices.</p><h2>Why Use Microservices?</h2><p>To understand the general history and structure of microservices emerging as an architectural pattern, this <a
href=https://martinfowler.com/articles/microservices.html>Martin Fowler article</a> is a good and fairly comprehensive read. It&#8217;s worth noting Fowler&#8217;s caveat near the end that:</p><blockquote><p>“One reasonable argument we&#8217;ve heard is that you shouldn&#8217;t start with a microservices architecture. Instead begin with a monolith, keep it modular, and split it into microservices once the monolith becomes a problem.”</p></blockquote><p>This is good advice. However, especially in a world where developers are becoming increasingly empowered to operate their own applications, microservices are becoming the &#8220;accidental default&#8221; in some cases. For instance, at my employer <a
href=https://honeycomb.io/ >Honeycomb</a>, for a variety of reasons including the quality of the operations team, the architecture has leaned towards this type of modularity from the start (without any deliberate attempt to introduce microservices specifically).<br>
Additionally, there are a variety of good reasons to use microservices, if you are prepared to accept <a
href=https://martinfowler.com/articles/microservice-trade-offs.html>the tradeoffs</a>:</p><ul>
<li>
<strong>Programs are more scalable</strong>. Instead of requiring many copies of a large application just to &#8220;scale&#8221; one part, apps can be scaled with more granularity. This translates to cost savings. In a world with ever-increasing cloud spend, this is tempting.</li>
<li>
<strong>Teams are more scalable</strong>. A team can iterate on only their service and worry less about having too many cooks in the &#8220;kitchen&#8221; of their codebase. Cleaner interfaces can be defined (since &#8220;cheating&#8221; using in-process data accesses is no longer possible) and defensive coding is encouraged because downstream services become potential &#8220;attackers&#8221; (e.g., by accidentally making too many requests).</li>
<li>
<strong>You gain flexibility to use different technologies to solve different problems</strong>. For instance, a machine learning classifier service could be deployed using Python by a team who primarily writes Java.</li>
<li>
<strong>General debugging and performance engineering can become easier</strong>. If one service is bottlenecked by something, this can be easier to spot in a microservice than in a rapidly changing monolith. Additionally, since each service is deployed separately, the number of deploys to examine as possible locations of breakage is reduced.</li></ul><h2>Do Microservices Require Brand New Tooling?</h2><p>While it&#8217;s tempting to throw out everything existing and start from scratch when undergoing a shift such as the move to microservices, this is not required. As one example, the use of Linux containers and microservices together is frequently presented as an all-or-nothing proposition: it is implied that if you are using one you are definitely using the other. This is not actually the case.</p><p>While there are certainly potential advantages from adopting a microservice architecture and a container technology such as Docker together, one does not require the other. In fact, it&#8217;s potentially wiser to make only one change at a time. Large monolithic applications are just as happy to be containerized as small ones, and microservices will fit into a world using more mature DevOps tools quite snugly.</p><p>However, there are plenty of instances where reaching for a new tool in a microservices architecture <em>does</em> provide benefits. While, as noted above, it&#8217;s not requisite to use containers, depending on the situation of the team they could fit in nicely. For instance, they are frequently a fantastic fit in CI and CD pipelines even if you are not ready to use them in production.</p><p>In addition to your deployment practices, a likely area of your infrastructure you might take aim at is the transport layer your services use to communicate with each other. Since the communication is mostly internal, it has a slightly different set of parameters and needs than one that is exposed directly to the outside world. Thus, models like pulling from a message queue or using service-to-service RPC could be a better fit than what you might do if exposing your service to external consumers. One technology gaining rapid mindshare in this area is <a
href=https://grpc.io/ >gRPC</a>. gRPC shares some similarities with earlier systems such as <a
href=https://thrift.apache.org/ >Apache Thrift</a>. Let&#8217;s take a look at why we might want to use gRPC and what it is like.</p><h2>What&#8217;s in a Transport Layer? Reaching for gRPC</h2><p><a
href=https://grpc.io/ >gRPC</a>, as noted by its website, is:</p><p>“A general purpose, open-source universal RPC framework.”</p><p>Why might we want one of those? Well, if we are going to be making network calls from program to program across the network, we are going to need to use some sort of protocol. Many shops would reach for a &#8220;<a
href=https://en.wikipedia.org/wiki/Representational_state_transfer>REST-ish</a>&#8221; usage of HTTP/1.1, frequently passing around <a
href=https://en.wikipedia.org/wiki/JSON>JSON</a>. This is a perfectly valid approach, but especially for internal usage, it has some shortcomings:</p><ul>
<li>
<strong>Version compatibility issues rapidly rear their ugly head</strong>. It won&#8217;t take long in the services&#8217; lifecycle before developers want to deprecate fields, refactor old methods into new ones and more.</li>
<li>
<strong>Client libraries for various languages are difficult</strong>. If another team wants to communicate with your service, they will have to roll their own client library for it, including annoying (but important) authentication logic.</li>
<li>
<strong>It&#8217;s a poor fit for some methods of communication such as bi-directional streaming</strong>. If you want to rapidly &#8220;stream&#8221; data (e.g., the bytes representing a video call) back and forth, HTTP/1.1 calls are an awkward fit.</li>
<li>
<strong>It&#8217;s not optimally performant</strong>. Since services are likely to be located on computers geographically close to each other, it&#8217;s less likely that the network will be a bottleneck. With JSON+HTTP/1.1, a lot of processor effort is spent encoding and decoding messages passed to or received from other services due to the loose structure.</li></ul><p>gRPC offers solutions to these problems, in respective order:</p><ul>
<li>
<strong>Schemas are specified in a format called <a
href=https://developers.google.com/protocol-buffers/ >Protocol Buffers</a>, which eases compatibility issues</strong>. Errors due to field name mismatches, removed methods, and more will become less frequent (and more obvious to spot the source of).</li>
<li>
<strong>Code can be automatically generated for your language of choice</strong>. Support exists to generate client bindings for many popular languages very rapidly. While not perfect, it&#8217;s a far cry better than hand-crafted bindings that need to be meticulously maintained over time, wasting precious developer cycles.</li>
<li>
<strong>Bidirectional streaming and authentication are supported out of the box</strong>. Real-time communication between services is supported as a first class citizen, as are essential security features like authentication between services.</li>
<li>
<strong>It&#8217;s high performance</strong>. For instance, <a
href=https://blog.gopheracademy.com/advent-2015/etcd-distributed-key-value-store-with-grpc-http2/ >this user reports in their benchmark</a> that DevOps project <a
href=https://coreos.com/etcd>etcd</a> served requests about 40 times as fast (down to ~7ms of request response time from ~292ms) when they switched from HTTP/1.1 to gRPC.</li></ul><h2>gRPC Workflow and Tradeoffs</h2><p>Let&#8217;s take a quick look into what usage of gRPC locally is like:</p><ul>
<li>The developer writes out a service definition in one or more &#8220;proto&#8221; files, defining the methods used to access their service and the data structures it accepts and returns.</li>
<li>The developer invokes the <a
href=https://github.com/google/protobuf>Protobuf</a> compiler, which reads in these files and generates code for their language of choice to use.</li>
<li>The developer uses the automatically generated code to serve, and communicate between, services.</li></ul><p>Naturally, once deployed in production, gRPC services communicate with each other in an internal subnet authenticated using something like TLS. Locally, however, the average developer&#8217;s workflow is likely to be unauthenticated, and services will need to be reloaded constantly. This is one possible hurdle to using gRPC effectively and it remains to be seen if increased tooling in this area will help alleviate this problem over time.</p><p>Other tradeoffs include opacity of the framework (consider: little access to general purpose tools like curl which can be used to rapidly introspect many HTTP-based services) and lack of full maturity (although the <a
href=https://grpc.io/blog/gablogpost>1.0 version was recently declared</a>). Regardless, the cheery young technology is likely to be invaluable to teams who are capable of using it in the intersection of correct utility weighed against ease of use.</p><h2>Will gRPC Flourish in the Dawn of Microservices?</h2><p>Will gRPC continue to grow in this Cambrian era of innovation in tooling and deployment practices that we are currently experiencing? It remains to be seen. The backing of a giant like Google has proven to be useful in other tools such as <a
href=https://golang.org/ >Golang</a>, and that certainly doesn&#8217;t hurt in this instance. However, we have seen many trends and fashions come and go in the technology space, and only a few stubborn stalwarts stick around. I&#8217;m optimistic for this technology and feel that, even if gRPC and microservices themselves do not live on, their ideas and influence will continue to impact the collective DNA of the space.</p><p>Have fun out there and microservice on.</p><aside
class="post-note post-note-end"><p><a
href="https://conferences.oreilly.com/velocity/vl-eu/public/schedule/detail/61355?intcmp=il-webops-confsched-article-vleu17_newsite_whats_in_a_transport_layer_end">Learn how to rewrite monoliths into microservices</a> at the O’Reilly Velocity Conference, taking place in London Oct. 17-20. Use code ORM20 to save 20% on your conference pass (Gold, Silver, and Bronze passes).</p></aside></div><div
class=postContent-end><div
class=radar-post-page-meta >
Post topics: <a
href=https://www.oreilly.com/content/topics/operations/ title=Operations>Operations</a></div></div><div
id=postContent-related class=postContent-related></div></section></div></div> <script async src=https://cdn.jsdelivr.net/npm/@miso.ai/client-sdk@1.12.5/dist/umd/miso.min.js></script> <script>function getCookie(name) {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
if (parts.length === 2) return parts.pop().split(';').shift();
return null;
}
function connectToMiso() {
if (typeof MisoClient !== "undefined") {
const token = getCookie('orm-jwt');
const client = new MisoClient('La8iqtxogTm6Zq3rHtGB7PGqcrNsopypjyPIVPGE');
// Decode JWT token and set user_id in context
try {
if (token) {
const decoded = jwt_decode(token).sub;
if (decoded) {
client.context.user_hash = decoded;
}
}
} catch (error) {
console.error('JWT Decode Error:', error);
}
//Send page view data to Miso
client.api.interactions.upload({
type: 'product_detail_page_view',
product_ids: ['radar_3768'],
});
//Get recommended post data from Miso
client.api.recommendation.productToProducts({
engine_id: 'rec',
product_id: 'radar_3768',
rows: 2,
fl: ["*"],
})
.then(response => {
// Check if products exist and render recommendations
if (response.products && response.products.length >= 2) {
renderMisoRecommendations(response.products);
} else {
console.log('No recommendations found or fewer than 2 products returned.');
}
})
.catch(error => {
console.error('Miso Recommendation Error:', error);
});
} else {
// Retry after a short delay if MisoClient is not yet loaded
setTimeout(connectToMiso, 100);
}
}
function renderMisoRecommendations(products) {
const relatedDiv = document.getElementById('postContent-related');
const fetchedData = []; // Temporary storage for fetched data
let fetchCount = 0; // Counter to track completed fetches
if (products && products.length > 0 && relatedDiv) {
// Fetch author and date for each post
products.forEach(product => {
fetchAuthorAndDate(product.product_id)
.then(data => {
if (data) {
// Add the fetched data to the product object
fetchedData.push({
...product,
author: data.author,
date: data.date,
});
} else {
console.error('Failed to fetch author and date:', data.message);
}
})
.catch(error => {
console.error('Error fetching author and date:', error);
})
.finally(() => {
fetchCount++;
// Render the posts only after all fetches are complete
if (fetchCount === products.length) {
renderPosts(fetchedData, relatedDiv);
}
});
});
}
}
function renderPosts(products, relatedDiv) {
if (products.length > 0) {
let html = '<div class=recommendedPosts><h3>Explore related articles</h3><div class=posts>';
products.forEach(product => {
if (product.type === 'post') {
product.type = 'article';
}
html += `
<a class=item href=${product.url} data-id=${product.product_id}>
<figure class=${product.type}><img src=${product.cover_image} alt></figure>
<div class=inner>
<div class=item-text>
<p class="post-type ${product.type}">
<span>${product.type}</span>
<span>${product.categories[0][0]}</span>
</p>
<h2>${product.title}</h2>
<div class=metaWrap>
<p class=meta>By ${product.author} | </p>
<p class=meta>${product.date}</p>
</div>
</div>
</div>
</a>
`;
});
html += '</div></div>';
// Insert the generated HTML into the #postContent-related div
relatedDiv.innerHTML = html;
} else {
console.warn('No recommendations to display.');
}
}
function fetchAuthorAndDate(postId) {
//Clean string
postId = postId.replace(/^radar_/, '');
return fetch(feed_ajax.ajaxurl, {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: new URLSearchParams({
action: 'get_post_author_and_date',
post_id: postId,
}),
})
.then(response => {
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
return response.json();
})
.then(data => {
if (!data || typeof data !== 'object' || !data.success) {
throw new Error('Invalid or unsuccessful JSON response');
}
return data.data; // Return the nested data object
})
.catch(error => {
console.error('Error fetching author and date:', error);
return { success: false }; // Return a failure response
});
}
// Initialize the Miso connection
connectToMiso();</script> <div
id=bottomModules class=bottomModules></div></main><footer
id=site-footer><div
id=site-footer-container class=content><section
class=site-footer__section id=site-footer-social><p>Follow us</p><ul
id=site-footer-social-list>
<li><a
class=site-footer-social-list__link href=https://www.linkedin.com/company/oreilly-media target=_blank title="O&#039;Reilly on LinkedIn"><svg
xmlns=http://www.w3.org/2000/svg width=20 height=20 viewBox="0 0 24 24" fill=#444444><path
d="M20.447 20.452H16.893V14.883C16.893 13.555 16.866 11.846 15.041 11.846C13.188 11.846 12.905 13.291 12.905 14.785V20.452H9.351V9H12.765V10.561H12.811C13.288 9.661 14.448 8.711 16.181 8.711C19.782 8.711 20.448 11.081 20.448 14.166L20.447 20.452ZM5.337 7.433C4.193 7.433 3.274 6.507 3.274 5.368C3.274 4.23 4.194 3.305 5.337 3.305C6.477 3.305 7.401 4.23 7.401 5.368C7.401 6.507 6.476 7.433 5.337 7.433ZM7.119 20.452H3.555V9H7.119V20.452ZM22.225 0H1.771C0.792 0 0 0.774 0 1.729V22.271C0 23.227 0.792 24 1.771 24H22.222C23.2 24 24 23.227 24 22.271V1.729C24 0.774 23.2 0 22.222 0H22.225Z"></path></svg></a></li><li><a
class=site-footer-social-list__link href=https://www.youtube.com/user/OreillyMedia target=_blank title="O&#039;Reilly on YouTube"><svg
xmlns=http://www.w3.org/2000/svg width=20 height=20 viewBox="0 0 24 24" fill=none><path
d="M23.495 6.20498C23.356 5.70674 23.0907 5.2528 22.725 4.88703C22.3592 4.52126 21.9052 4.25603 21.407 4.11698C19.537 3.61598 12.011 3.61598 12.011 3.61598C12.011 3.61598 4.50401 3.60598 2.61501 4.11698C2.11677 4.25603 1.66283 4.52126 1.29706 4.88703C0.931287 5.2528 0.666058 5.70674 0.527007 6.20498C0.172528 8.11949 -0.0022322 10.0629 0.00500725 12.01C-0.000863617 13.9497 0.173891 15.8857 0.527007 17.793C0.666058 18.2912 0.931287 18.7452 1.29706 19.1109C1.66283 19.4767 2.11677 19.7419 2.61501 19.881C4.48301 20.383 12.011 20.383 12.011 20.383C12.011 20.383 19.517 20.383 21.407 19.881C21.9052 19.7419 22.3592 19.4767 22.725 19.1109C23.0907 18.7452 23.356 18.2912 23.495 17.793C23.8407 15.885 24.0081 13.949 23.995 12.01C24.0095 10.0636 23.8421 8.12018 23.495 6.20498ZM9.60901 15.601V8.40798L15.873 12.01L9.60901 15.601Z" fill=#444444></path></svg></a></li></ul></section><section
class=site-footer__section id=site-footer-company-info aria-label="company info"><div
class=site-footer-company-info__column id=site-footer-company-info-column-left><div
class=site-footer__list id=site-footer-approach><h2 class="site-footer__heading"><a
href=/about/ >About O&#039;Reilly</a></h2><ul
class=site-footer-list__ul><li><a
href=/work-with-us.html>Teach/Write/Train</a></li><li><a
href=/careers/ >Careers</a></li><li><a
href=/press/ >O&#039;Reilly News</a></li><li><a
href=/press/media-coverage.html>Media Coverage</a></li><li><a
href=/partner/signup.csp>Community Partners</a></li><li><a
href=/affiliates/ >Affiliate Program</a></li><li><a
href=/diversity/ >Diversity</a></li><li><a
href=/content-marketing-solutions.html>Content Sponsorship</a></li></ul></div><div
class=site-footer__list id=site-footer-contact><h2 class="site-footer__heading"><a
href=/online-learning/support/ >Support</a></h2><ul
class=site-footer-list__ul><li><a
href=/about/contact.html>Contact Us</a></li><li><a
href=/emails/newsletters/ >Newsletters</a></li><li><a
href=/privacy.html>Privacy Policy</a></li><li><a
href=/about/oreilly-approach-to-generative-ai.html>AI Policy</a></li></ul></div><div
class=site-footer__list id=site-footer-international><h2 class="site-footer__heading">International</h2><ul
class=site-footer-list__ul><li><a
href=/online-learning/anz.html>Australia &amp; New Zealand</a></li><li><a
href=https://www.oreilly.co.jp/index.shtml>Japan</a></li></ul></div></div><div
class=site-footer-company-info__column id=site-footer-company-info-column-right><div
class="site-footer__list site-footer-company-info-right-column__item" id=site-footer-mobile-download><h2 class="site-footer__heading">Download the O'Reilly App</h2><p>Take O'Reilly with you and learn anywhere, anytime on your phone and tablet.</p><ul
class="site-footer-list__ul site-footer-list__ul--horizontal"> <li><a
href=https://itunes.apple.com/us/app/safari-to-go/id881697395 title="Download in the Apple App Store" data-testid=app-store-link><img
class=site-footer__image alt="Apple app store" src=https://cdn.oreillystatic.com/oreilly/images/app-store-logo.png></a></li> <li><a
href="https://play.google.com/store/apps/details?id=com.safariflow.queue"><img
class=site-footer__image alt="Google play store" src=https://cdn.oreillystatic.com/oreilly/images/google-play-logo.png></a></li></ul></div></div></section><section
class=site-footer__section id=site-footer-subfooter>
<a
class=footer-subfooterLogo href=https://www.oreilly.com title="home page" aria-current=page>
<img
id=site-footer-subfooter-logo alt="O'Reilly home"
srcset="https://cdn.oreillystatic.com/images/sitewide-headers/oreilly_logo_mark_red_@2x.png 2x"
src=https://cdn.oreillystatic.com/images/sitewide-headers/oreilly_logo_mark_red.svg>
</a><div
id=site-footer-subfooter-donotsell><p>
<a
href="https://www.oreilly.com/privacy.html?donotsell=show" id=site-footer-subfooter-donotsell-link>
Do not sell or share my personal information
</a>.</p></div><div
id=site-footer-subfooter-copyright><p>
&copy; 2026, O'Reilly Media, Inc. All trademarks and registered trademarks appearing on oreilly.com are the property of their respective owners.</p><ul
class="site-footer-list__ul--horizontal site-footer-list__ul--wrap" id=site-footer-subfooter-copyright-links>
<li><a
href=https://www.oreilly.com/terms/ >Terms of Service</a></li><li><a
href=/privacy>Privacy Policy</a></li><li><a
href=/about/editorial_independence.html>Editorial Independence</a></li><li><a
href=https://www.oreilly.com/modern-slavery-act-transparency-statement.html>Modern Slavery Act Statement</a></li></ul></div></section></div></footer> <script type=speculationrules>{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/content/*"},{"not":{"href_matches":["/content/wp-*.php","/content/wp-admin/*","/content/wp-content/uploads/sites/2/*","/content/wp-content/*","/content/wp-content/plugins/*","/content/wp-content/themes/signal/*","/content/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}</script> <script id=feed-loader-js-extra>var feed_ajax = {"ajaxurl":"https://www.oreilly.com/content/wp-admin/admin-ajax.php","siteName":"signal"};
//# sourceURL=feed-loader-js-extra</script> <script src=https://www.oreilly.com/content/wp-content/cache/minify/2/afccc.js></script> <script id=wp-emoji-settings type=application/json>
{"baseUrl":"https://s.w.org/images/core/emoji/17.0.2/72x72/","ext":".png","svgUrl":"https://s.w.org/images/core/emoji/17.0.2/svg/","svgExt":".svg","source":{"concatemoji":"https://www.oreilly.com/content/wp-includes/js/wp-emoji-release.min.js?ver=7.1"}}
</script> <script type=module>/*! This file is auto-generated */
var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))});
//# sourceURL=https://www.oreilly.com/content/wp-includes/js/wp-emoji-loader.min.js</script> <script>// Handle the reading mode toggle
const siteId = 2;
let siteName = "";
if (siteId === 3) {
siteName = "radar";
} else if (siteId === 5) {
siteName = "resources";
}
const themeToggleBtn = document.getElementById('themeToggle');
let savedTheme = localStorage.getItem('theme');
const prefersDarkTheme = window.matchMedia('(prefers-color-scheme: dark)').matches;
const prefersLightTheme = window.matchMedia('(prefers-color-scheme: light)').matches;
const theme = savedTheme || (prefersDarkTheme ? 'dark' : (prefersLightTheme ? 'light' : 'dark'));
document.documentElement.setAttribute('data-theme', theme);
themeToggleBtn.setAttribute('aria-pressed', theme === 'light');
document.addEventListener("DOMContentLoaded", () => {
themeToggleBtn.addEventListener('click', () => {
const isDark = document.documentElement.getAttribute('data-theme') === 'dark';
const newTheme = isDark ? 'light' : 'dark';
document.documentElement.setAttribute('data-theme', newTheme);
localStorage.setItem('theme', newTheme);
themeToggleBtn.setAttribute('aria-pressed', newTheme === 'light');
if (typeof dataLayer !== "undefined" && Array.isArray(dataLayer)) {
dataLayer.push({
'event': "eventTracker",
'eventCat': siteName,
'eventAct': "reading mode",
'eventLbl': newTheme,
'eventVal': 0,
'nonInteraction': 0
});
} else {
console.warn("dataLayer is not defined. Reading mode event not tracked.");
}
});
// Enable transitions only after initial setup
requestAnimationFrame(() => {
document.documentElement.classList.add('enableTransitions');
});
});
window.addEventListener("scroll", function () {
document.body.classList.toggle("scrolling", window.scrollY > 50);
});
(() => {
/* Navigation UI and tracking script */
// EVENTS
const EVENT_CLOSE_MENUS = 'closemenus';
function dispatchCloseAllMenus() {
const customEvent = new CustomEvent(EVENT_CLOSE_MENUS);
document.dispatchEvent(customEvent);
}
// OBSERVE MOBILE MENU
function observeMobileMenu() {
const toggles = Array.from(document.querySelectorAll('[data-mobile-toggle]'));
if (!toggles.length) return;
const mobileQuery = window.matchMedia('(width < 1370px)');
toggles.forEach(observeToggle);
mobileQuery.addEventListener('change', onMediaQueryChange);
function observeToggle(toggle) {
toggle.addEventListener('click', onToggle);
}
return function cleanup() {
toggles.forEach((toggle) => toggle.removeEventListener('click', onToggle));
mobileQuery.removeEventListener('change', onMediaQueryChange);
};
function onToggle(event) {
const toggle = event.currentTarget;
if (isOpen(toggle)) {
closeMenu(toggle);
dispatchCloseAllMenus();
} else {
closeAllMenus();
openMenu(toggle);
}
}
function onMediaQueryChange() {
closeAllMenus();
dispatchCloseAllMenus();
}
function closeAllMenus() {
toggles.forEach(closeMenu);
}
function closeMenu(toggle) {
const menu = selectMenu(toggle);
document.documentElement.classList.remove('menu-open');
toggle.setAttribute('aria-expanded', 'false');
menu.setAttribute('hidden', '');
menu.setAttribute('aria-hidden', 'true');
menu.setAttribute('inert', '');
}
function openMenu(toggle) {
const menu = selectMenu(toggle);
document.documentElement.classList.add('menu-open');
toggle.setAttribute('aria-expanded', 'true');
menu.removeAttribute('hidden');
menu.setAttribute('aria-hidden', 'false');
menu.removeAttribute('inert');
}
function isOpen(toggle) {
return toggle.getAttribute('aria-expanded') === 'true';
}
function selectMenu(toggle) {
return document.getElementById(toggle.getAttribute('aria-controls'));
}
}
// OBSERVE MOBILE POPOVERS
function observeMobilePopovers() {
const mobileNav = document.getElementById(
'orm-global-mobile-pane--navigation',
);
const toggles = mobileNav.querySelectorAll('[aria-haspopup="true"]');
if (!toggles.length) return;
document.addEventListener(EVENT_CLOSE_MENUS, closeDrawers);
toggles.forEach(observeToggle);
function observeToggle(toggle) {
toggle.addEventListener('click', onToggle);
}
return function cleanup() {
document.removeEventListener(EVENT_CLOSE_MENUS, closeDrawers);
toggles.forEach((toggle) => toggle.removeEventListener('click', onToggle));
};
function onToggle(event) {
const toggle = event.currentTarget;
const drawerId = toggle.getAttribute('aria-controls');
const drawer = document.getElementById(drawerId);
const back = document.querySelector(
`[data-back-button-for="${drawer.id}"]`,
);
if (isDrawerOpen(drawer)) {
closeDrawer(drawer, toggle);
} else {
openDrawer(drawer, toggle);
back.addEventListener('click', closeDrawer.bind(null, drawer, toggle), {
once: true,
});
}
}
function closeDrawer(drawer, toggle) {
drawer.setAttribute('hidden', '');
drawer.setAttribute('inert', '');
toggle.setAttribute('aria-expanded', false);
}
function closeDrawers() {
toggles.forEach((toggle) => {
const drawerId = toggle.getAttribute('aria-controls');
const drawer = document.getElementById(drawerId);
closeDrawer(drawer, toggle);
});
}
function isDrawerOpen(drawer) {
return !drawer.hasAttribute('hidden');
}
function openDrawer(drawer, toggle) {
drawer.removeAttribute('hidden');
drawer.removeAttribute('inert');
toggle.setAttribute('aria-expanded', true);
}
}
// OBSERVE POPOVERS
function observePopovers() {
const header = document.getElementById('orm-global-site-banner');
const navigationList = document.getElementById(
'orm-global-site-navigation-list',
);
const dialogs = header.querySelectorAll('dialog');
const toggles = header.querySelectorAll('[aria-haspopup="true"]');
const module = { header, navigationList };
const boundObservePopoverToggle = observePopoverToggle.bind(this, module);
const boundObserveDialog = observeDialog.bind(this, module);
toggles.forEach(boundObservePopoverToggle);
dialogs.forEach(boundObserveDialog);
}
function observePopoverToggle(module, toggle) {
const popoverId = toggle.getAttribute('aria-controls');
const popover = document.getElementById(popoverId);
toggle.addEventListener('click', togglePopover);
function togglePopover() {
const isOpen = popover.hasAttribute('open');
if (isOpen) {
closePopover(toggle, popover, module.navigationList, module.header);
} else {
openPopover(
toggle,
popover,
module.navigationList,
module.header,
Number(toggle.dataset.level),
);
}
}
}
function observeDialog(module, dialog) {
const observer = new MutationObserver(onMutation);
observer.observe(dialog, { attributes: true, attributeFilter: ['open'] });
return function cleanup() {
observer.disconnect();
};
function onMutation(list) {
const dialog = list?.[0]?.target;
const toggle = document.querySelector(`[aria-controls="${dialog.id}"]`);
const isOpen = dialog.hasAttribute('open');
if (isOpen) {
document.addEventListener('click', closeOnClickOutside);
document.addEventListener('keydown', closeOnEscape);
} else {
document.removeEventListener('click', closeOnClickOutside);
document.removeEventListener('keydown', closeOnEscape);
}
function closeOnClickOutside(event) {
if (module.header.contains(event.target)) return;
closePopover(toggle, dialog, module.navigationList, module.header);
}
function closeOnEscape(event) {
if (event.key !== 'Escape') return;
closePopover(toggle, dialog, module.navigationList, module.header);
}
}
}
function closePopover(toggle, popover, list, header) {
toggle.setAttribute('aria-expanded', 'false');
popover.removeAttribute('open');
const openDialogs = Array.from(header.querySelectorAll('dialog[open]'));
if (!openDialogs.length) {
list.classList.remove('orm-global-site-banner-list--open');
}
}
function openPopover(toggle, popover, list, header, level) {
console.log('openPopover');
header
.querySelectorAll(`dialog[data-level="${level + 1}"][open]`)
.forEach((dialog) => {
dialog.removeAttribute('open');
dialog?.parentElement
?.querySelector('button')
?.setAttribute('aria-expanded', 'false');
});
toggle.setAttribute('aria-expanded', 'true');
popover.setAttribute('open', '');
if (level >= 1) {
list.classList.add('orm-global-site-banner-list--open');
} else {
list.classList.remove('orm-global-site-banner-list--open');
}
}
// TRACK FUNCTION
function track(properties) {
const GTM_DEFAULTS = {
event: 'eventTracker',
eventVal: 0,
nonInteraction: 0,
};
try {
// eslint-disable-next-line no-undef
dataLayer.push({ ...GTM_DEFAULTS, ...properties });
} catch (error) {
console.error('Error tracking event:', error);
}
}
// OBSERVE GTM FUNCTION
function observeGTM() {
const elements = document.querySelectorAll('[data-gtm]');
if (!elements.length) return;
elements.forEach(observeElement);
return () => {
elements.forEach(unObserveElement);
};
function observeElement(element) {
element.addEventListener(element.dataset.gtmEvent, trackGTMEvent);
}
function unObserveElement(element) {
element.removeEventListener(element.dataset.gtmEvent, trackGTMEvent);
}
function trackGTMEvent() {
const properties = JSON.parse(this.dataset.gtm);
track(properties);
}
}
// Initialize the observers
observeMobileMenu();
observeMobilePopovers();
observePopovers();
observeGTM();
})();</script> <script id=MathJax-script>var math = document.getElementsByClassName('math-tex');
if (math.length > 0) includeMathJax();
function includeMathJax() {
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.src = "https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js";
script.type = 'text/javascript';
script.async = 'async';
head.appendChild(script)
}</script> <script type="text/javascript" nonce="16e5c4b4416a66a6ec474d74b008d70d" src="/23zL8njd9Ky8oNZRzwI_NMn2/Y57NGLfGXJbJm4NE/EzQmBQE/LQYDQBJe/XRUB"></script><link rel="stylesheet" type="text/css" nonce="16e5c4b4416a66a6ec474d74b008d70d" href="/23zL8njd9Ky8oNZRzwI_NMn2/wz7N/P10MBQE/ag5-YFoG/cwtZ"><script nonce="16e5c4b4416a66a6ec474d74b008d70d" src="/23zL8njd9Ky8oNZRzwI_NMn2/wz7N/P10MBQE/Hkl6NTUM/H3wp" async defer></script><div id="sec-overlay" style="display:none;"><div id="sec-container"></div></div><script type="text/javascript" nonce="16e5c4b4416a66a6ec474d74b008d70d" src="/23zL8njd9Ky8oNZRzwI_NMn2/wz7NGLz1G5/EnctBQE/PlFZEHhj/FHga?v=275c0437-eeb1-e4a3-2c67-10a8604417d2" defer></script></body></html>