[{"data":1,"prerenderedAt":1875},["ShallowReactive",2],{"i-kinnu:logo":3,"i-kinnu:origami-folding":8,"pathway-technology-backend-development":12,"i-lucide:chevron-right":1870,"i-lucide:tag":1873},{"left":4,"top":4,"width":5,"height":5,"rotate":4,"vFlip":6,"hFlip":6,"body":7},0,27,false,"\u003Cg fill=\"none\">\u003Cpath d=\"M0.046875 1.05555C0.046875 1.03541 0.048197 1.01579 0.0507438 0.996728C0.0987149 0.438619 0.586845 0 1.18194 0H25.4398C26.451 0 26.9575 1.171 26.2424 1.85585L15.7301 11.9243L1.31574 0.903476C1.17475 0.79568 1.01137 0.761884 0.859586 0.784111L26.2936 25.1441C27.0086 25.829 26.5022 27 25.4909 27H1.18194C0.555061 27 0.046875 26.5133 0.046875 25.9129V1.05555Z\" fill=\"currentColor\"/>\u003C/g>",{"left":4,"top":4,"width":9,"height":10,"rotate":4,"vFlip":6,"hFlip":6,"body":11},1000,236,"\u003Cg fill=\"none\">\u003Cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n    d=\"M193.68 38.2238C195.994 38.2238 197.87 40.0989 197.87 42.412V231.812C197.87 234.125 195.994 236 193.68 236H4.19013C1.87603 236 2.02305e-07 234.125 0 231.812V42.412C-2.02305e-07 40.0989 1.87603 38.2238 4.19013 38.2238H193.68ZM111.76 89.0072C111.685 87.9474 110.572 87.2905 109.608 87.7376L96.8872 93.641C95.7786 94.1554 95.702 95.7016 96.7545 96.3225L101.579 99.167C94.7045 109.365 90.5733 122.892 90.5732 137.642C90.5733 154.323 95.8569 169.439 104.416 179.945C105.301 181.032 106.9 181.196 107.987 180.311C109.075 179.426 109.238 177.828 108.353 176.741C100.621 167.25 95.6522 153.305 95.6521 137.642C95.6522 123.661 99.6138 111.051 105.963 101.754L110.456 104.403C111.508 105.024 112.826 104.21 112.74 102.991L111.76 89.0072ZM9.63194 136.286C9.14864 136.286 8.75684 136.678 8.75684 137.161C8.7569 137.644 9.14868 138.035 9.63194 138.035H17.2161C17.6993 138.035 18.0912 137.644 18.0912 137.161C18.0912 136.678 17.6994 136.286 17.2161 136.286H9.63194ZM22.6813 136.286C22.198 136.286 21.8062 136.678 21.8062 137.161C21.8063 137.644 22.1981 138.035 22.6813 138.035H30.2655C30.7487 138.035 31.1406 137.644 31.1406 137.161C31.1406 136.678 30.7488 136.286 30.2655 136.286H22.6813ZM35.7464 136.286C35.2631 136.286 34.8713 136.678 34.8713 137.161C34.8713 137.644 35.2631 138.035 35.7464 138.035H44.4973C44.9805 138.035 45.3724 137.644 45.3724 137.161C45.3724 136.678 44.9806 136.286 44.4973 136.286H35.7464ZM49.9977 136.286C49.5144 136.286 49.1226 136.678 49.1226 137.161C49.1226 137.644 49.5144 138.035 49.9977 138.035H57.5819C58.0651 138.035 58.4569 137.644 58.457 137.161C58.457 136.678 58.0651 136.286 57.5819 136.286H49.9977ZM63.0783 136.286C62.595 136.286 62.2032 136.678 62.2032 137.161C62.2033 137.644 62.5951 138.035 63.0783 138.035H70.6625C71.1457 138.035 71.5375 137.644 71.5376 137.161C71.5376 136.678 71.1457 136.286 70.6625 136.286H63.0783ZM76.1277 136.286C75.6444 136.286 75.2526 136.678 75.2526 137.161C75.2527 137.644 75.6445 138.035 76.1277 138.035H83.7119C84.1951 138.035 84.5869 137.644 84.587 137.161C84.587 136.678 84.1951 136.286 83.7119 136.286H76.1277ZM102.266 136.286C101.782 136.286 101.39 136.678 101.39 137.161C101.391 137.644 101.782 138.035 102.266 138.035H109.85C110.333 138.035 110.725 137.644 110.725 137.161C110.725 136.678 110.333 136.286 109.85 136.286H102.266ZM115.338 136.286C114.855 136.286 114.463 136.678 114.463 137.161C114.463 137.644 114.855 138.035 115.338 138.035H122.923C123.406 138.035 123.798 137.644 123.798 137.161C123.798 136.678 123.406 136.286 122.923 136.286H115.338ZM128.403 136.286C127.92 136.286 127.528 136.678 127.528 137.161C127.528 137.644 127.92 138.035 128.403 138.035H135.988C136.471 138.035 136.863 137.644 136.863 137.161C136.863 136.678 136.471 136.286 135.988 136.286H128.403ZM141.468 136.286C140.985 136.286 140.593 136.678 140.593 137.161C140.593 137.644 140.985 138.035 141.468 138.035H149.053C149.536 138.035 149.928 137.644 149.928 137.161C149.928 136.678 149.536 136.286 149.053 136.286H141.468ZM154.541 136.286C154.058 136.286 153.666 136.678 153.666 137.161C153.666 137.644 154.058 138.035 154.541 138.035H162.125C162.609 138.035 163 137.644 163.001 137.161C163.001 136.678 162.609 136.286 162.125 136.286H154.541ZM167.614 136.286C167.131 136.286 166.739 136.678 166.739 137.161C166.739 137.644 167.131 138.035 167.614 138.035H175.198C175.681 138.035 176.073 137.644 176.073 137.161C176.073 136.678 175.681 136.286 175.198 136.286H167.614ZM180.671 136.286C180.188 136.286 179.796 136.678 179.796 137.161C179.796 137.644 180.188 138.035 180.671 138.035H188.255C188.739 138.035 189.13 137.644 189.131 137.161C189.131 136.678 188.739 136.286 188.255 136.286H180.671Z\"\n    fill=\"currentColor\" />\n  \u003Cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n    d=\"M444.85 38.2277C447.164 38.2277 449.04 40.1028 449.04 42.4159V132.928C449.04 135.241 447.164 137.116 444.85 137.116H255.36C253.046 137.116 251.17 135.241 251.17 132.928V42.4159C251.17 40.1028 253.046 38.2277 255.36 38.2277H444.85ZM361.96 125.388C361.618 125.046 361.064 125.046 360.722 125.388L354.534 131.572C354.192 131.914 354.192 132.468 354.534 132.81C354.876 133.151 355.43 133.151 355.772 132.81L361.96 126.624C362.301 126.283 362.301 125.73 361.96 125.388ZM371.047 116.311C370.705 115.969 370.15 115.969 369.809 116.311L364.446 121.671C364.104 122.012 364.104 122.567 364.446 122.908C364.788 123.249 365.342 123.25 365.684 122.908L371.047 117.548C371.388 117.207 371.388 116.652 371.047 116.311ZM380.124 107.246C379.782 106.904 379.227 106.904 378.885 107.246L373.523 112.606C373.181 112.948 373.181 113.502 373.523 113.844C373.864 114.185 374.419 114.185 374.761 113.844L380.124 108.483C380.465 108.142 380.465 107.587 380.124 107.246ZM385.736 65.8841C385.891 64.6727 384.622 63.7845 383.536 64.3434L371.069 70.7636C370.124 71.2504 369.96 72.5334 370.752 73.2424L381.2 82.5938C382.11 83.4081 383.561 82.8672 383.717 81.6557L384.393 76.3725C391.143 77.1933 398.567 80.7709 404.771 86.9711C411.124 93.3213 414.726 100.952 415.43 107.827C415.573 109.221 416.819 110.236 418.214 110.093C419.609 109.95 420.624 108.703 420.481 107.309C419.644 99.1317 415.435 90.4514 408.362 83.3817C401.466 76.489 393.038 72.3185 385.038 71.338L385.736 65.8841ZM389.2 98.1733C388.859 97.8319 388.304 97.8318 387.962 98.1733L382.6 103.534C382.258 103.875 382.258 104.429 382.6 104.771C382.941 105.112 383.496 105.112 383.838 104.771L389.2 99.4108C389.542 99.0693 389.542 98.5149 389.2 98.1733ZM398.262 89.1047C397.92 88.7633 397.365 88.7632 397.024 89.1047L391.661 94.4649C391.319 94.8065 391.319 95.3608 391.661 95.7024C392.002 96.0436 392.557 96.0438 392.899 95.7024L398.262 90.3421C398.603 90.0007 398.603 89.4463 398.262 89.1047ZM416.431 70.9616C416.089 70.6202 415.534 70.6201 415.193 70.9616L409.83 76.3218C409.488 76.6634 409.488 77.2177 409.83 77.5592C410.172 77.9005 410.726 77.9007 411.068 77.5592L416.431 72.199C416.772 71.8575 416.772 71.3032 416.431 70.9616ZM425.508 61.891C425.166 61.5496 424.611 61.5495 424.27 61.891L418.907 67.2512C418.565 67.5928 418.565 68.1471 418.907 68.4887C419.249 68.8299 419.803 68.8301 420.145 68.4887L425.508 63.1284C425.849 62.787 425.849 62.2326 425.508 61.891ZM434.569 52.8146C434.227 52.4731 433.673 52.4731 433.331 52.8146L427.968 58.1748C427.626 58.5163 427.627 59.0706 427.968 59.4122C428.31 59.7534 428.864 59.7537 429.206 59.4122L434.569 54.052C434.91 53.7105 434.91 53.1562 434.569 52.8146ZM443.638 43.7479C443.296 43.4065 442.742 43.4064 442.4 43.7479L437.037 49.1081C436.695 49.4496 436.696 50.004 437.037 50.3455C437.379 50.6868 437.933 50.687 438.275 50.3455L443.638 44.9853C443.98 44.6438 443.979 44.0895 443.638 43.7479Z\"\n    fill=\"currentColor\" />\n  \u003Cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n    d=\"M684.066 38.2277C687.798 38.2281 689.667 42.7391 687.027 45.3773L596.473 135.889C595.687 136.675 594.621 137.116 593.51 137.116H506.335C504.021 137.116 502.145 135.241 502.145 132.928V42.4159C502.145 40.1028 504.021 38.2277 506.335 38.2277H684.066ZM514.603 124.566C514.261 124.224 513.707 124.224 513.365 124.566L507.178 130.751C506.836 131.093 506.836 131.646 507.178 131.988C507.519 132.329 508.073 132.329 508.415 131.988L514.603 125.803C514.945 125.462 514.945 124.908 514.603 124.566ZM523.689 115.491C523.348 115.15 522.794 115.15 522.452 115.491L517.09 120.852C516.748 121.193 516.748 121.747 517.09 122.088C517.431 122.43 517.985 122.43 518.327 122.088L523.689 116.728C524.031 116.386 524.031 115.833 523.689 115.491ZM532.102 65.8295C530.707 65.6872 529.46 66.7017 529.318 68.0957C529.175 69.4896 530.189 70.7355 531.584 70.8787C538.463 71.5825 546.096 75.1826 552.45 81.5329C558.723 87.8037 562.312 95.3226 563.079 102.13L557.738 102.392C556.518 102.452 555.865 103.855 556.607 104.827L565.115 115.969C565.76 116.814 567.051 116.751 567.611 115.847L574.992 103.928C575.635 102.889 574.848 101.555 573.628 101.615L568.161 101.882C568.161 101.878 568.162 101.874 568.161 101.871C567.324 93.6931 563.114 85.0124 556.041 77.9425C548.968 70.873 540.283 66.6668 532.102 65.8295ZM532.766 106.421C532.425 106.079 531.871 106.079 531.529 106.421L526.166 111.781C525.825 112.123 525.825 112.676 526.166 113.018C526.508 113.359 527.062 113.359 527.403 113.018L532.766 107.657C533.108 107.316 533.108 106.762 532.766 106.421ZM541.843 97.3445C541.501 97.003 540.948 97.003 540.606 97.3445L535.243 102.705C534.901 103.046 534.902 103.6 535.243 103.941C535.585 104.283 536.139 104.283 536.48 103.941L541.843 98.5809C542.185 98.2393 542.185 97.686 541.843 97.3445ZM550.92 88.2778C550.578 87.9363 550.025 87.9363 549.683 88.2778L544.32 93.638C543.978 93.9796 543.978 94.5329 544.32 94.8745C544.662 95.2161 545.215 95.2161 545.557 94.8745L550.92 89.5142C551.262 89.1727 551.262 88.6193 550.92 88.2778ZM569.066 70.1405C568.724 69.799 568.17 69.7991 567.829 70.1405L562.466 75.5008C562.124 75.8423 562.124 76.3956 562.466 76.7372C562.808 77.0788 563.361 77.0788 563.703 76.7372L569.066 71.377C569.407 71.0354 569.407 70.4821 569.066 70.1405ZM578.143 61.0699C577.801 60.7284 577.247 60.7285 576.906 61.0699L571.543 66.4302C571.201 66.7717 571.201 67.3251 571.543 67.6666C571.885 68.0082 572.438 68.0082 572.78 67.6666L578.143 62.3064C578.484 61.9648 578.484 61.4115 578.143 61.0699ZM587.219 51.9896C586.878 51.6481 586.324 51.6481 585.982 51.9896L580.62 57.3498C580.278 57.6914 580.278 58.2447 580.62 58.5863C580.961 58.9279 581.515 58.9279 581.857 58.5863L587.219 53.2261C587.561 52.8845 587.561 52.3312 587.219 51.9896ZM596.288 42.9249C595.947 42.5833 595.392 42.5833 595.05 42.9249L589.689 48.2851C589.347 48.6267 589.347 49.18 589.689 49.5216C590.03 49.863 590.584 49.8631 590.926 49.5216L596.288 44.1613C596.63 43.8198 596.63 43.2664 596.288 42.9249Z\"\n    fill=\"currentColor\" />\n  \u003Cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n    d=\"M850.814 38.2277C854.547 38.2281 856.416 42.739 853.777 45.3773L763.223 135.889C762.437 136.674 761.371 137.116 760.26 137.116H673.176C669.443 137.116 667.574 132.605 670.213 129.966L760.768 39.4544C761.554 38.6692 762.62 38.2277 763.731 38.2277H850.814ZM761.338 121.8C760.855 121.8 760.463 122.191 760.463 122.674V131.13H762.213V122.674C762.213 122.191 761.821 121.8 761.338 121.8ZM761.338 108.971C760.855 108.971 760.463 109.363 760.463 109.846V118.301H762.213V109.846C762.213 109.363 761.821 108.971 761.338 108.971ZM761.338 96.1402C760.855 96.1406 760.463 96.5321 760.463 97.0149V105.47H762.213V97.0149C762.213 96.532 761.821 96.1404 761.338 96.1402ZM782.263 71.887C781.043 71.951 780.395 73.3571 781.139 74.3257L784.474 78.6631C779.115 82.951 771.242 85.7443 762.35 85.7444C753.366 85.7442 745.421 82.8944 740.059 78.5305C738.972 77.6461 737.373 77.8099 736.488 78.8961C735.602 79.983 735.766 81.582 736.853 82.467C743.231 87.6574 752.348 90.8207 762.35 90.8209C772.209 90.8208 781.205 87.746 787.568 82.6884L790.833 86.9341C791.577 87.9025 793.103 87.6391 793.479 86.4767L797.791 73.138C798.118 72.127 797.33 71.1017 796.268 71.1566L782.263 71.887ZM761.338 70.4847C760.855 70.4851 760.463 70.8767 760.463 71.3594V79.8147H762.213V71.3594C762.213 70.8766 761.821 70.485 761.338 70.4847ZM761.338 57.656C760.855 57.6564 760.463 58.048 760.463 58.5307V66.986H762.213V58.5307C762.213 58.0479 761.821 57.6563 761.338 57.656ZM761.338 44.8293C760.855 44.8297 760.463 45.2212 760.463 45.704V54.1592H762.213V45.704C762.213 45.2211 761.821 44.8295 761.338 44.8293Z\"\n    fill=\"currentColor\" />\n  \u003Cpath\n    d=\"M995.759 38.2277C999.53 38.228 1001.42 42.5171 998.752 45.0253L959.55 81.9005L905.796 41.5363C905.271 41.1418 904.662 41.0182 904.096 41.0994L997.485 130.319C1000.15 132.828 998.262 137.116 994.491 137.116H905.298C902.96 137.116 901.065 135.333 901.065 133.134V42.0941C901.065 42.0204 901.07 41.9483 901.079 41.8786C901.258 39.8345 903.079 38.2277 905.298 38.2277H995.759Z\"\n    fill=\"currentColor\" />\n  \u003Cpath\n    d=\"M505.873 0C506.657 4.57042e-05 507.307 0.195499 507.823 0.587023C508.338 0.969046 508.596 1.53802 508.596 2.29251C508.596 2.76034 508.467 3.19015 508.209 3.58162C507.951 3.96344 507.497 4.26401 506.848 4.48361V4.54114C507.65 4.67487 508.205 4.96191 508.51 5.4012C508.816 5.83087 508.969 6.31772 508.969 6.86193C508.969 7.74056 508.672 8.41851 508.08 8.89604C507.497 9.38304 506.733 9.62731 505.787 9.62738C504.861 9.62738 504.158 9.42172 503.68 9.0111C503.212 8.60054 502.935 8.08005 502.849 7.44993L503.881 7.10571L503.924 7.24028C504.035 7.54934 504.211 7.82925 504.454 8.07986C504.731 8.36635 505.166 8.50986 505.758 8.50989C506.465 8.50989 506.943 8.32772 507.191 7.9648C507.449 7.6019 507.579 7.20078 507.579 6.7615C507.579 6.2173 507.378 5.80683 506.977 5.52992C506.585 5.25295 505.93 5.10026 505.013 5.07161V4.15402C505.901 4.12537 506.489 3.92484 506.776 3.55237C507.062 3.18009 507.206 2.82242 507.206 2.47876C507.206 1.62801 506.752 1.17539 505.845 1.12237L505.658 1.11749C505.467 1.11752 505.242 1.14605 504.985 1.2033C504.736 1.25105 504.511 1.3274 504.31 1.43245L504.081 2.56457L503.05 2.44951L503.322 0.687461C503.666 0.49653 504.068 0.33454 504.526 0.200875C504.985 0.0671945 505.434 0 505.873 0Z\"\n    fill=\"currentColor\" />\n  \u003Cpath\n    d=\"M905.727 2.30616L904.638 2.4066L904.466 1.26083H901.428V3.72497C901.533 3.71544 901.643 3.71034 901.757 3.71034H902.086C902.755 3.71034 903.386 3.78668 903.979 3.93949C904.58 4.09229 905.068 4.38363 905.44 4.8132C905.822 5.23335 906.014 5.84949 906.014 6.66106C906.014 7.64468 905.722 8.38068 905.14 8.86776C904.557 9.36434 903.783 9.6127 902.818 9.61275C901.91 9.61275 901.213 9.40711 900.725 8.99648C900.248 8.59544 899.96 8.08007 899.865 7.44993L900.911 7.10571C901.007 7.49723 901.203 7.8271 901.499 8.09449C901.795 8.37131 902.211 8.50985 902.746 8.50989C903.395 8.50989 903.869 8.33787 904.165 7.99405C904.461 7.65981 904.609 7.22507 904.609 6.69031C904.609 5.87861 904.337 5.3625 903.792 5.14279C903.248 4.91361 902.612 4.79958 901.886 4.79955C901.695 4.79955 901.489 4.80365 901.27 4.8132C901.059 4.82275 900.854 4.83701 900.653 4.85611L900.224 4.44071V0.143343H905.569L905.727 2.30616Z\"\n    fill=\"currentColor\" />\n  \u003Cpath fill-rule=\"evenodd\" clip-rule=\"evenodd\"\n    d=\"M765.49 6.04576H766.966L766.837 7.14862H765.49V9.48404H764.185V7.14862H759.857L759.713 6.04576L762.909 0.143343H765.49V6.04576ZM760.96 6.04576H764.185V1.26083H763.541L760.96 6.04576Z\"\n    fill=\"currentColor\" />\n  \u003Cpath d=\"M4.80573 6.47481H6.41154V7.60693H1.81068V6.47481H3.50235V1.27546H1.81068V0.143343H4.80573V6.47481Z\"\n    fill=\"currentColor\" />\n  \u003Cpath\n    d=\"M254.359 0C255.353 0 256.055 0.239186 256.466 0.716715C256.877 1.18447 257.083 1.68072 257.083 2.20573C257.083 2.85516 256.849 3.44346 256.38 3.96875C255.912 4.49397 255.348 4.96638 254.689 5.38657C254.039 5.79717 253.437 6.15968 252.883 6.47481H256.423L256.538 5.42948L257.599 5.51529L257.426 7.60693H251.407L251.292 6.58987C252.582 5.73032 253.638 4.98523 254.46 4.35489C255.281 3.71509 255.693 3.05632 255.693 2.37832C255.693 1.53787 255.166 1.11749 254.115 1.12237L254.115 1.11749C253.924 1.11754 253.695 1.14604 253.427 1.2033C253.16 1.25104 252.916 1.32238 252.697 1.41783L252.467 2.47876L251.45 2.3637L251.707 0.60165C252.118 0.401088 252.563 0.253475 253.041 0.15797C253.519 0.0529708 253.958 1.99446e-05 254.359 0Z\"\n    fill=\"currentColor\" />\u003C/g>",{"id":13,"data":14,"type":15,"maxContentLevel":29,"version":30,"tiles":31},"69370500-2874-4779-84ae-256e6652c817",{"type":15,"title":16,"tagline":17,"description":17,"featureImageSquare":18,"baseColor":19,"emoji":20,"shapePreference":4,"allowContentSuspension":21,"allowContentEdits":21,"editorsChoice":6,"accreditations":22,"certificatePriceLevel":27,"certificationTitle":28},8,"Backend Development","The powerhouse behind every website and app you've ever opened","db8cf51b-ee50-4a49-b3ef-c7dd906bd156","#3DADAD","🖥️",true,[23],{"authority":24,"wasCpdTill":25,"previousCpdCreditMinutes":26},1,"2025-12-31T00:00:00Z",120,2,"Principles of Backend Development",9,4,[32,132,403,583,785,922,1160,1365,1584,1760],{"id":33,"data":34,"type":29,"maxContentLevel":37,"version":24,"orbs":38},"63629f7f-e115-4462-a56b-dca806bf338d",{"type":29,"title":35,"tagline":36},"What is backend development?","The hidden powerhouse of the web",3,[39],{"id":40,"data":41,"type":27,"version":24,"maxContentLevel":37,"pages":43},"3e9a6e2e-d0c0-40c8-be6a-eee3f0d2ae3f",{"type":27,"title":42},"Understanding Backend Development",[44,50,68,94],{"id":45,"data":46,"type":24,"maxContentLevel":37,"version":24},"fc74c55a-0b49-421f-8737-8eb0ebdca3f5",{"type":24,"title":47,"contentRole":27,"markdownContent":48,"audioMediaId":49},"Meet the backend","Backend development is the powerhouse behind every website and app that you've ever used. You click a button on a website, and your ice cream order gets delivered to you – that’s thanks to backend development.\n\nIn more technical terms, backend development involves managing databases, writing programmes, and building website architecture. It ensures that data is stored and retrieved efficiently, that a website responds correctly to inputs, and that the system doesn’t crash if ten of your friends all order ice cream at once.\n\n ![Graph](image://50379856-2035-4dee-93c6-67c7b284f468 \"Backend development. Image: Lisa Fotios via Pexels (https://www.pexels.com/photo/man-coding-on-computers-sitting-at-desk-16129703/)\")\n\nBy the end of this pathway, you’ll understand exactly how the backend works, and know what happens behind the scenes every time you use a website or app. This knowledge is important for everyday web users – and it’s also the perfect place to start for anyone looking to launch a career in this field.\n\n","292fe38c-b611-4f47-9977-9262bd380796",{"id":51,"data":52,"type":24,"maxContentLevel":37,"version":24,"reviews":56},"63323347-fb98-4e64-ac4d-7175bc5970d9",{"type":24,"title":53,"contentRole":27,"markdownContent":54,"audioMediaId":55},"Meet the frontend","The existence of backend development suggests, of course, frontend development. They’re two sides of the same coin: frontend development covers anything a user can see and interact with, while backend development covers everything behind the scenes.\n\nBasically, when you push a button on a website, that’s part of the frontend. After you push the button, the backend takes over, processing your input and generating the right response.\n\n ![Graph](image://04e29fa4-db80-40ce-8f65-29d1d94fe026 \"The frontend. Image: Erik Mclean via Pexels (https://www.pexels.com/photo/photo-of-a-hand-holding-a-phone-with-a-delivery-app-on-screen-16052344/)\")\n\nA useful analogy is ordering food from a menu. When you select a hamburger from the menu, that’s the frontend. When this prompts a series of actions, like the waiter taking your order to the chef, the chef preparing your burger, and the waiter bringing it out to you, that’s the backend.\n\n","3dc5773e-c7ac-4ecb-9e27-94241fda86c8",[57],{"id":58,"data":59,"type":60,"version":24,"maxContentLevel":37},"ead0d9cd-ebc2-4679-95e7-0d66418456dc",{"type":60,"reviewType":27,"spacingBehaviour":24,"binaryQuestion":61,"binaryCorrect":64,"binaryIncorrect":66},11,[62,63],"Which type of development covers everything a user can see and interact with?","What kind of development relates to all the components a user can actually see?",[65],"Frontend",[67],"Backend",{"id":69,"data":70,"type":24,"maxContentLevel":37,"version":24,"reviews":74},"644ed6b0-e771-4ffd-a7a9-2fe42987f136",{"type":24,"title":71,"contentRole":27,"markdownContent":72,"audioMediaId":73},"Backend development","A website without a backend would be like a car without an engine. It might look good on the outside, but it wouldn't be able to move. When a user pushed a button, nothing would happen. There’d be nothing behind the scenes.\n\n ![Graph](image://eb90d6e5-5c31-4354-8a9a-1649e0097a22 \"Developers. Image: DCStudio via Freepik (https://www.freepik.com/free-photo/system-developers-analyzing-code-wall-screen-tv-looking-errors-while-team-coders-collaborate-artificial-intelligence-project-programmers-working-together-machine-learning-software_26367398.htm)\")\n\nMore specifically, without a backend, every website and application would be a static page with no way to process user inputs or data. They’d basically act like digital brochures with nothing to click or interact with.\n\nOn the other hand, a website with a powerful backend would be dynamic, interactive, and data-driven. It could respond to user inputs in real-time, update its content based on changing data, and perform complex tasks such as data analysis and prediction.","08749f3d-7235-4a01-abbc-c1d58d5c8f48",[75,85],{"id":76,"data":77,"type":60,"version":24,"maxContentLevel":37},"24ebfcf9-6f10-4cfa-ae38-a5033d102ff3",{"type":60,"reviewType":27,"spacingBehaviour":24,"binaryQuestion":78,"binaryCorrect":81,"binaryIncorrect":83},[79,80],"A website without a backend would be like a car without what?","If a website lacks a backend, it's like a car missing what?",[82],"An engine",[84],"A paint job",{"id":86,"data":87,"type":60,"version":24,"maxContentLevel":37},"5ee2e21a-83a7-46d0-901f-55809a637028",{"type":60,"reviewType":27,"spacingBehaviour":24,"binaryQuestion":88,"binaryCorrect":92,"binaryIncorrect":93},[89,90,91],"Which type of development covers everything that happens behind the scenes?","What kind of development is responsible for all the processes behind the scenes?","Which area of development covers all the operations that aren't visible to the user?",[67],[65],{"id":95,"data":96,"type":24,"maxContentLevel":37,"version":24,"reviews":100},"2505cbb6-bffd-4f66-aa8d-a465ea1e91f0",{"type":24,"title":97,"contentRole":27,"markdownContent":98,"audioMediaId":99},"Backend Developers","The backend doesn't just pop into existence of its own accord. Instead, it needs to be built and maintained by specialist Backend Developers.\n\nIt's a job in high demand. There are 1.88 billion websites in the world right now – not to mention all the apps and video games – and none of them could exist without Backend Developers working behind the scenes. From one-man e-commerce shops, all the way to behemoths like Microsoft or Google, millions of companies need Backend Developers to keep their companies afloat.\n\n ![Graph](image://c540143e-d94f-4cbf-b05e-6dc818e6246d \"Using Google. Image: Sanket Mishra via Pexels (https://www.pexels.com/photo/men-typing-in-the-google-search-engine-from-realme-6-pro-google-is-the-number-one-search-web-16629436/)\")\n\nWith so many different opportunities out there, Backend Developers need a versatile set of skills. At any given moment, they might find themselves optimizing a database for faster performance, ensuring the security of a website, scaling a game to handle increased traffic, or doing a hundred other jobs besides. This demand for versatility makes backend development a challenging field, but a rewarding field too.\n\n","780ea981-07d1-4727-a694-5e74e42df360",[101,113,124],{"id":102,"data":103,"type":60,"version":24,"maxContentLevel":37},"3e0be717-3f6b-4843-a1b0-12a0f8ac5343",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":104,"multiChoiceCorrect":107,"multiChoiceIncorrect":109},[105,106],"Which of these might a Backend Developer work on?","Which of these tasks might a Backend Developer be responsible for?",[108],"Optimizing a database",[110,111,112],"Designing a user interface","Running customer support","Managing social media",{"id":114,"data":115,"type":60,"version":24,"maxContentLevel":37},"5f93d302-4541-4a43-8c52-6988f1800593",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":116,"multiChoiceCorrect":118,"multiChoiceIncorrect":120},[117],"How many websites are there in the world right now?",[119],"1.88 billion",[121,122,123],"1.77 billion","1.66 billion","1.55 billion",{"id":125,"data":126,"type":60,"version":24,"maxContentLevel":37},"e1206627-dd80-4592-94f7-e0236c3102b0",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":127,"clozeWords":130},[128,129],"Backend development is a job in high demand.","There is a high need for jobs in backend development.",[131],"high",{"id":133,"data":134,"type":29,"maxContentLevel":37,"version":27,"orbs":137},"dd86a81c-1bbe-4939-b928-20fd4e7a9d25",{"type":29,"title":135,"tagline":136},"Coding skills","From syntax to loops",[138,231,348],{"id":139,"data":140,"type":27,"version":24,"maxContentLevel":37,"pages":142},"21b91eb4-047e-4137-b164-9287fd44872f",{"type":27,"title":141},"Introduction to Coding",[143,178,204],{"id":144,"data":145,"type":24,"maxContentLevel":37,"version":24,"reviews":149},"7e270fc8-2c86-4b0c-b310-0f4fcfa20762",{"type":24,"title":146,"contentRole":27,"markdownContent":147,"audioMediaId":148},"What is coding?","Whatever a Backend Developer is working on, one thing is central to everything they do, and that's the ability to code. \n\n ![Graph](image://0bbb3aa0-c1fa-4252-a3f2-0d666e7fb1f4 \"Computer code. Image: Lionel Rowe, CC0/Public Domain, \u003Chttps://creativecommons.org/share-your-work/public-domain/cc0/> via Wikimedia Commons\")\n\nCoding is the process of instructing a computer to perform specific tasks. These instructions are delivered through a terminal, also known as a command line interface (CLI) – you can think of it like a messaging app that lets you talk to your computer directly. \n\nA terminal is available on any normal laptop, but most of us never have a reason to use it. We interact with our computer using icons and menus, otherwise known as the graphical user interface (GUI). But the GUI can be too limited for the needs of a Backend Developer. They need a terminal, because it lets them deliver specific, code-based commands. \n\nWhen writing lots of code at once, a developer can also use an Integrated Development Environment (IDE). This is similar to a word processor, but tailored specifically for writing code. It’s easier to use an IDE than it is to use a terminal directly.\n\n","8f5284d2-e255-4fc9-849f-7cb507c5bf1c",[150,159,167],{"id":151,"data":152,"type":60,"version":24,"maxContentLevel":37},"60d1bfeb-4249-4de7-bec8-07174d66d0fe",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":153,"clozeWords":157},[154,155,156],"A computer's icons and menus are otherwise known as the graphical user interface (GUI).","The icons and menus on a computer constitute what is known as the graphical user interface (GUI).","The term 'graphical user interface' (GUI) refers to the icons and menus on a computer.",[158],"graphical user interface",{"id":160,"data":161,"type":60,"version":24,"maxContentLevel":37},"89f21bd6-44ce-4e4a-ac7b-127842a10456",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":162,"activeRecallAnswers":165},[163,164],"What piece of software is similar to a word processor, but specifically tailored for writing code?","What is the specialized software, which is similar to a word processor, but is used specifically for coding?",[166],"Integrated Development Environment (IDE)",{"id":168,"data":169,"type":60,"version":24,"maxContentLevel":37},"f59e9058-1e5b-4e46-a139-ec9c317da285",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":170,"multiChoiceCorrect":172,"multiChoiceIncorrect":174},[171],"Developers deliver code through a command line interface (CLI), which is otherwise known as what?",[173],"Terminal",[175,176,177],"Monitor","GUI","IDE",{"id":179,"data":180,"type":24,"maxContentLevel":37,"version":24,"reviews":184},"8c60bf87-81d5-4c90-b439-595cb189dd5e",{"type":24,"title":181,"contentRole":27,"markdownContent":182,"audioMediaId":183},"Choosing a language","Backend Developers need a strong understanding of at least one programming language. However, they often use multiple languages over the course of their professional career. This not only broadens their skill set, but also makes them more versatile and adaptable to new projects and requirements.\n\nFor anyone new to backend development, it's a good idea to start with a beginner-friendly programming language such as JavaScript. These languages are not only easier to learn, but also have large communities and extensive resources that provide support and guidance along the way. \n\nAnother example is Python, which is becoming the go to language for Machine Learning and Deep Learning. Ruby is another common language, known for its focus on developer happiness and productivity.\n\nWhen choosing a language, it's important to consider the type of project, the size of the language's community, and how much you enjoy coding in it. If a backend developer has a dream employer in mind, they can also check which languages they prefer to work with. For example, Facebook famously uses Hack, a programming language they created themselves.","83ddeb10-b211-4896-bf9d-285417e72929",[185,196],{"id":186,"data":187,"type":60,"version":24,"maxContentLevel":37},"09746a65-29a6-4403-8422-9b807ae7de61",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":188,"activeRecallAnswers":192},[189,190,191],"What are three beginner-friendly programming languages?","Can you name three programming languages that are suitable for beginners?","Which three languages would you recommend for someone just starting out in backend development?",[193,194,195],"JavaScript","Python","Ruby",{"id":197,"data":198,"type":60,"version":24,"maxContentLevel":37},"55a79706-6802-47e8-86b4-65267b510128",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":199,"activeRecallAnswers":203},[200,201,202],"A programming language which is becoming the go to for Machine Learning and Deep Learning is:","Which programming language is increasingly being used for Machine Learning and Deep Learning?","What is the programming language that is gaining popularity in the fields of Machine Learning and Deep Learning?",[194],{"id":205,"data":206,"type":24,"maxContentLevel":37,"version":24,"reviews":210},"4b395b71-3072-4e79-b23d-75da1ac3087a",{"type":24,"title":207,"contentRole":27,"markdownContent":208,"audioMediaId":209},"Syntax","Every programming language has its own set of syntax – that's a set of rules that define how the language should be structured. Think of it like grammar in human language: “Dinner? ready is” doesn’t make sense. In the exact same way, a programming language won't make sense to a computer if syntax isn't used correctly.\n\nLet’s use Python as an example. This language’s syntax dictates that every parenthesis has a pair. This code would lead to an error message – *print(\"Hello World!\"* – because the parenthesis is missing its pair. \n\nBut if this code was rewritten with the correct syntax – *print(\"Hello World!\")* – it would make sense to the computer, and the words **Hello World!** would appear in the terminal window.\n\n ![Graph](image://56331780-4c90-4fcc-82cb-03b4ca10e968 \"Hello World. Image: Shaddim, Public domain, via Wikimedia Commons\")\n\nRemember, this example is specific to Python. Other languages have different sets of rules.\n\n","6b97853f-bcd4-470b-a472-3ca9cb6b50f1",[211,221],{"id":212,"data":213,"type":60,"version":24,"maxContentLevel":37},"6ad8d6e3-502c-4414-b800-a57efee073de",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":214,"multiChoiceCorrect":216,"multiChoiceIncorrect":217},[215],"The set of rules that define how a programming language should be structured is known as:",[207],[218,219,220],"Grammar","Semantics","Punctuation",{"id":222,"data":223,"type":60,"version":24,"maxContentLevel":37},"e2d96451-448e-4a5b-92a3-616118aee6f9",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":224,"clozeWords":229},[225,226,227,228],"In Python, every parenthesis must have a pair, otherwise it leads to an error message.","If a parenthesis in Python doesn't have a pair, it will result in an error message.","Python requires every parenthesis to have a pair, or else an error message will occur.","An error message will appear in Python if a parenthesis is missing its pair.",[230],"pair",{"id":232,"data":233,"type":27,"version":27,"maxContentLevel":37,"pages":235},"a0b506fd-d0a1-4a3a-8b38-f634ff12d3f8",{"type":27,"title":234},"Core Programming Concepts",[236,286,312],{"id":237,"data":238,"type":24,"maxContentLevel":37,"version":27,"reviews":242},"3938d4b1-2e3a-49da-885e-9b7eb8e0e155",{"type":24,"title":239,"contentRole":27,"markdownContent":240,"audioMediaId":241},"Variables","Just like syntax, variables are an important part of coding. A variable is a kind of placeholder – you can think of it like a sign that represents a piece of data.\n\nFor example, a developer might use 'pi' as a placeholder for a complicated number like '3.14159'. After setting this variable, the developer can use 'pi' while writing their code, and the computer will know that the letters represent the number. This is a lot more efficient than typing the number every time, especially if it appears in the code on multiple occasions.\n\nVariables can represent many types of data, including strings of text (\"Hello World!\"), integers (1, 2, 3), floating point numbers (3.14, 10.2), or booleans (true, false).\n\nUsing Python as an example, a developer could set a new variable – *b = \"Banana\"*. They could then give the computer a command – *print(b)* – and the word **Banana** would appear in the terminal window.","635026e8-c9bb-4146-a5bd-3078a93b308e",[243,262,275],{"id":244,"data":245,"type":60,"version":24,"maxContentLevel":37},"11c4a821-10e1-4219-ab30-cf082a03e369",{"type":60,"reviewType":246,"spacingBehaviour":24,"matchPairsQuestion":247,"matchPairsPairs":249},6,[248],"Match the types of data:",[250,253,256,259],{"left":251,"right":252,"direction":37},"String","\"Hello!\"",{"left":254,"right":255,"direction":37},"Integer","57",{"left":257,"right":258,"direction":37},"Floating point number","12.5",{"left":260,"right":261,"direction":37},"Boolean","true",{"id":263,"data":264,"type":60,"version":24,"maxContentLevel":37},"785855f9-5f1e-402f-be11-977a5701f15e",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":265,"multiChoiceCorrect":269,"multiChoiceIncorrect":271},[266,267,268],"After setting a variable (b = \"banana\") what Python command could be used to print the word \"banana\"?","What would be the Python command to display the word \"banana\" after it has been assigned to a variable (b = \"banana\")?","If a developer has assigned the word \"banana\" to a variable (b = \"banana\"), what Python command would they use to print this word?",[270],"print(b)",[272,273,274],"(print)b","(print b)","()printb",{"id":276,"data":277,"type":60,"version":24,"maxContentLevel":37},"bc6b0f89-102a-4e1a-995a-b6a2ce8ef551",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":278,"multiChoiceCorrect":280,"multiChoiceIncorrect":282},[279],"In coding, a placeholder that represents a piece of data is known as:",[281],"A variable",[283,284,285],"A function","An array","An object",{"id":287,"data":288,"type":24,"maxContentLevel":37,"version":27,"reviews":292},"6f15bfec-d018-42d5-9df3-c90ec11e3296",{"type":24,"title":289,"contentRole":27,"markdownContent":290,"audioMediaId":291},"Data structures","Variables become even more powerful when you start incorporating different data structures – these are specialized formats that a developer can use to store a number of variables at once.\n\nLists are ordered collections of items, which on Python, might look something like this: *fruits = \\[\"apple\", \"banana\", \"orange\", \"pear\"\\]*. If this list was set up for a grocery store, the computer could track all the fruits available, and share this information with a user. For example, the computer could print the entire list, or just one specific item.\n\nOften programming languages will use zero to represent the first element in an array; this is known as a zero-based index. The command *print(fruits\\[0\\])* would get the computer to print the first item: **apple**. The command *print(fruits\\[1\\])* would print the second item, **banana**, and so on.\n\nDictionaries, meanwhile, store data in key-value pairs, like *\"fruit\": \"banana\"*, *\"price\": 0.45*, and *\"units\": 126*. After a dictionary is set up, the computer can start retrieving data from it, checking things like a store's current price for a single banana, and how many bananas they currently have in stock. Again, this information could be shared with users, and form a crucial part of an online grocery store's backend.","7d1e9438-1f6d-4c1f-ac43-960f6f126bf3",[293,304],{"id":294,"data":295,"type":60,"version":24,"maxContentLevel":37},"2d99159a-3315-44da-afb1-ded9c6366d74",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":296,"multiChoiceCorrect":298,"multiChoiceIncorrect":300},[297],"In Python, how do dictionaries store data?",[299],"Key-value pairs",[301,302,303],"Key-variable pairs","Key-value triplets","Key-variable triplets",{"id":305,"data":306,"type":60,"version":24,"maxContentLevel":37},"ec942f67-6d1a-418b-a9a2-d62dd4bac388",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":307,"clozeWords":310},[308,309],"Programming languages often use zero to represent the first element in a list. This is known as a zero-based index.","A zero-based index, where zero signifies the first element in a list, is commonly used in programming languages.",[311],"zero-based index",{"id":313,"data":314,"type":24,"maxContentLevel":37,"version":27,"reviews":318},"b49360f5-ce96-483d-8b4b-e411c4b5d640",{"type":24,"title":315,"contentRole":27,"markdownContent":316,"audioMediaId":317},"Conditionals","Backend development really starts cooking when you incorporate conditional statements. These use commands like *if* and *else* to let a computer make branching decisions, often in combination with comparison operators like equal to (==), not equal to (!=), greater than (&gt;), and less than (&lt;). Using Python, we can see an example of this:\n\n*if banana\\[\"units\"\\] &gt; 0*\n\n*print(\"Would you like to buy a banana?\")*\n\n*else:*\n\n*print(\"Bananas out of stock.\")*\n\nConditional statements can also be used to check things like a user's password. *If* they enter their password correctly, they can access to their profile, *else* a message is printed: **Access to bananas denied**.\n\n![Graph](image://163c2c43-14c6-4c95-9a4e-29faaff81010 \"If-else flowchart. Image: Snubcube, CC BY-SA 3.0 \u003Chttp://creativecommons.org/licenses/by-sa/3.0/>, via Wikimedia Commons\")","3a526791-35df-4d8a-b47a-53a8e74f0ae5",[319,337],{"id":320,"data":321,"type":60,"version":24,"maxContentLevel":37},"07e70f4b-6c7c-4899-a090-bb060465073f",{"type":60,"reviewType":246,"spacingBehaviour":24,"matchPairsQuestion":322,"matchPairsPairs":324},[323],"Match the comparison operators:",[325,328,331,334],{"left":326,"right":327,"direction":37},"Equal to","==",{"left":329,"right":330,"direction":37},"Not equal to","!=",{"left":332,"right":333,"direction":37},"Greater than",">",{"left":335,"right":336,"direction":37},"Less than","\u003C",{"id":338,"data":339,"type":60,"version":24,"maxContentLevel":37},"d641482e-f837-4695-9f5b-e71fefd846fa",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":340,"multiChoiceCorrect":342,"multiChoiceIncorrect":344},[341],"What kind of statements allow a computer to make branching decisions?",[343],"Conditional statements",[345,346,347],"Loop statements","Function statements","Variable statements",{"id":349,"data":350,"type":27,"version":24,"maxContentLevel":37,"pages":352},"e171dc8f-2003-42b8-bc28-a35e3f521117",{"type":27,"title":351},"Advanced Programming Techniques",[353,369],{"id":354,"data":355,"type":24,"maxContentLevel":37,"version":24,"reviews":359},"7cc4c223-5957-47db-b5a2-27a817f074a4",{"type":24,"title":356,"contentRole":27,"markdownContent":357,"audioMediaId":358},"Loops","Loops let developers write a piece of code once, then have it executed over and over again until a given condition has been met. This can save a lot of time, help to automate repetitive tasks, and provide a method for interpreting lots of structured data.\n\nFor example, you might have a list for every aisle in a gardening store. Each list contains all the products which can be found on that particular aisle: *Aisle1 = [\"pots\", “baskets”, \"troughs\"]*, *Aisle2 = [\"rakes\", \"shovels\", \"shears\"]*, and so on.\n\nA user might want to find out which aisle has watering cans. Instead of manually searching for the “watering cans” variable in each list individually, a loop could be used to automatically check them one by one. When it finds the variable it’s looking for, it stops searching and prints: **You’ll find watering cans in Aisle 4.**","14dae5b8-1131-47b9-9e1f-c56c33ea4e75",[360],{"id":361,"data":362,"type":60,"version":24,"maxContentLevel":37},"1fb3a9e3-f3bd-4cef-a752-08f61f9ae601",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":363,"activeRecallAnswers":367},[364,365,366],"What is the term for a piece of code that is executed repeatedly until a given condition is met?","What do you call a piece of code that continues to run until a specific condition has been fulfilled?","Can you name the type of code that repeatedly executes until a particular condition is achieved?",[368],"Loop",{"id":370,"data":371,"type":24,"maxContentLevel":37,"version":24,"reviews":375},"ab4e9579-c441-42f2-bfa5-36ffd08c975c",{"type":24,"title":372,"contentRole":27,"markdownContent":373,"audioMediaId":374},"Functions","Functions are pre-packaged sets of instructions that developers can define and reuse in their code. Basically, a developer can write a complicated block of code, give it a name, and then call that block when they need it. \n\nImagine you have a clothing store, and you want to offer a deal to every customer who happens to buy a tophat. Instead of writing the same code to check for tophats every single time a customer checks out, you can create a block of code which you define (‘def’) as **tophat_deal**:\n\n*def tophat_deal:*\n\n*if \"top hat\" in customer.cart*\n\n*print(\"Congratulations!\")*\n\n*else:*\n\n*print(\"Are you ready to pay?\")*\n\nInstead of running this entire block of code whenever a customer checks out, a developer could call the **tophat_deal** function, which performs all the steps automatically. Functions save time, and make a developer’s code more organized and easy to maintain.","e2fc6ba8-b0b8-490b-850a-f75071bb34f2",[376,393],{"id":377,"data":378,"type":60,"version":24,"maxContentLevel":37},"6be140de-8e99-4dbf-b24d-4a046bb1ffdd",{"type":60,"reviewType":246,"spacingBehaviour":24,"matchPairsQuestion":379,"matchPairsPairs":381},[380],"Match the coding term with its definition:",[382,385,388,390],{"left":383,"right":384,"direction":37},"Function","Resuable block of code",{"left":386,"right":387,"direction":37},"Variable","Placeholder for data",{"left":207,"right":389,"direction":37},"Rules for a language",{"left":391,"right":392,"direction":37},"List","Ordered collection of items",{"id":394,"data":395,"type":60,"version":24,"maxContentLevel":37},"f093bb0e-ab99-4ae7-87ab-4b4c1cdf1392",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":396,"multiChoiceCorrect":398,"multiChoiceIncorrect":399},[397],"Blocks of code, which developers are able to define and reuse, are called what?",[372],[400,401,402],"Procedures","Formats","Packages",{"id":404,"data":405,"type":29,"maxContentLevel":37,"version":24,"orbs":408},"1a38c7fa-7246-4094-bdbc-6d1d4b54164b",{"type":29,"title":406,"tagline":407},"Backend tools","How developers make their lives easier",[409,529],{"id":410,"data":411,"type":27,"version":24,"maxContentLevel":37,"pages":413},"6c76e71e-731c-409a-a66e-47d88e60721d",{"type":27,"title":412},"Modern Development Tools",[414,442,459,485,512],{"id":415,"data":416,"type":24,"maxContentLevel":37,"version":24,"reviews":420},"caca654e-586b-4de9-affa-b7d066601a65",{"type":24,"title":417,"contentRole":27,"markdownContent":418,"audioMediaId":419},"Development environments","Programming is easier now than it was a couple of decades ago. Back then, any kind of backend development was done using manual server configurations and direct manipulation of files. It was slow, fiddly, and difficult.\n\nToday, there are plenty of backend technologies that act as helpful shortcuts, especially integrated development environments (IDEs) like Visual Studio Code. These environments let you write, test, and debug code. They can significantly increase productivity, and reduce the likelihood of errors, because they offer things like code highlighting and auto-completion.\n\n ![Graph](image://ad2888d8-8d46-4d5c-9368-76e0d943ade0 \"Visual Studio Code. Image: Solnatum, CC BY-SA 4.0 \u003Chttps://creativecommons.org/licenses/by-sa/4.0>, via Wikimedia Commons\")\n\nCode highlighting helps to visually distinguish different elements, making it easier to spot mistakes. Auto-completion speeds up coding by suggesting relevant code snippets or function names, reducing the need to remember every detail.\n\n","e6704284-12b9-4cdc-a1f1-d084b1a0e7a7",[421,432],{"id":422,"data":423,"type":60,"version":24,"maxContentLevel":37},"bc7f4c07-9b1b-4969-85d8-ba219cb1af3d",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":424,"multiChoiceCorrect":426,"multiChoiceIncorrect":428},[425],"In the context of programming, what does IDE stand for?",[427],"Integrated Development Environments",[429,430,431],"Intelligent Design Environment","Integrated Design Elements","Intelligent Development Elements",{"id":433,"data":434,"type":60,"version":24,"maxContentLevel":37},"df5f7bf1-98e1-4830-9449-22df2c71f02e",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":435,"activeRecallAnswers":439},[436,437,438],"What are the two important features of an IDE that make coding easier?","Can you name two key features of an Integrated Development Environment that simplify the coding process?","Which two functionalities of an IDE contribute to making coding more efficient and less error-prone?",[440,441],"Code highlighting","Auto-completion",{"id":443,"data":444,"type":24,"maxContentLevel":37,"version":24,"reviews":448},"7ad8bafc-4079-4227-a094-de11e65379d9",{"type":24,"title":445,"contentRole":27,"markdownContent":446,"audioMediaId":447},"Backend frameworks","Just like IDEs, backend frameworks make life a lot easier for Backend Developers.\n\nThey're libraries of software that offer pre-built functions, like database integration or user authentication. A developer can easily add them to their project, instead of needing to write all of that code from scratch. Popular examples include Django for Python, and Express for Node.js. Frameworks are typically specific to a programming language, and to a certain task, such as backend or frontend development.\n\nBackend frameworks are a massive timesaver, but they can't be used for everything. It's like buying pre-cut vegetables – they'll save you a good chunk of time in the kitchen, but you'll still need to put in the time and work to turn them into a meal.\n\n","2ede352a-8270-47af-a950-4e58434d0300",[449],{"id":450,"data":451,"type":60,"version":24,"maxContentLevel":37},"4602faad-4aa8-40d3-a51b-b40ef3fbd7de",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":452,"multiChoiceCorrect":454,"multiChoiceIncorrect":455},[453],"Libraries of software that offer pre-built functions, like database integration or user authentication, are known as:",[445],[456,457,458],"Backend scaffolds","Backend structures","Backend foundations",{"id":460,"data":461,"type":24,"maxContentLevel":37,"version":24,"reviews":465},"16c7f528-1644-41f7-b373-2397d2caf3e8",{"type":24,"title":462,"contentRole":27,"markdownContent":463,"audioMediaId":464},"Text editors","Text editors like Sublime Text and Atom are to Backend Developers what word processing software is to the rest of us. Each language has multiple text editors available, so it’s up to the developer to pick one that works.\n\n ![Graph](image://60e0b51b-dca2-4332-9d24-d49f646b1c27 \"Atom text editor. Imaage: GitHub, MIT \u003Chttp://opensource.org/licenses/mit-license.php>, via Wikimedia Commons\")\n\nFor example, if a developer is coding in Python and needs to work with data analysis and data manipulation tasks in a backend project, they might choose Jupyter as their development environment. Jupyter offers a range of features that are particularly useful for data analysis, making it a suitable choice for such projects.\n\nText editors are typically lightweight applications, which means they load quickly and consume fewer system resources compared to full-fledged Integrated Development Environments (IDEs). This makes them particularly useful for quick code editing tasks.\n\n","65249cc7-f00e-4db3-9ea1-b80daf08c1f6",[466,477],{"id":467,"data":468,"type":60,"version":24,"maxContentLevel":37},"1b08e494-f898-48c1-b205-232dd3fe3864",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":469,"multiChoiceCorrect":471,"multiChoiceIncorrect":473},[470],"What is an advantage of text editors over Integrated Development Environments (IDEs)?",[472],"They load faster",[474,475,476],"They offer more features","They are more complex","They are better for data analysis",{"id":478,"data":479,"type":60,"version":24,"maxContentLevel":37},"3c561417-edc6-4ab7-b12a-fd0ec8eb04f4",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":480,"clozeWords":484},[481,482,483],"Text editors are lightweight applications that are useful for quick code editing tasks.","For quick code editing tasks, text editors are useful lightweight applications.","Text editors are handy, lightweight applications designed for quick code editing tasks.",[462],{"id":486,"data":487,"type":24,"maxContentLevel":37,"version":24,"reviews":491},"313f53d6-b786-44ba-bda9-726764f243c4",{"type":24,"title":488,"contentRole":27,"markdownContent":489,"audioMediaId":490},"Local development servers","Local development servers, like Apache or Nginx, are another vital tool which streamline the work of modern Backend Developers.\n\nIn simple terms, these are practice areas on your local computer that replicate the conditions of a real app or website. In these practice areas, mistakes don't matter – at least, these mistakes won't break anything on the real-life (production) websites which are already visible to users.\n\nTo use a baking analogy, it's like having the chance to taste your cake before putting it in the storefront. It takes a lot of the pressure off – if your cake is burnt, you can always bake another one.","6df7e1b5-b13f-429a-8fa3-e99583522dd8",[492,501],{"id":493,"data":494,"type":60,"version":24,"maxContentLevel":37},"53ef5cce-de8d-4699-99c5-9eae777d679e",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":495,"activeRecallAnswers":499},[496,497,498],"Why should developers use a local development server?","What is the advantage of using a local development server for developers?","Why is it beneficial for developers to use a local development server?",[500],"Mistakes won't break anything on real-life websites",{"id":502,"data":503,"type":60,"version":24,"maxContentLevel":37},"ac575680-9356-4e60-a18a-5358c3eb3a9f",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":504,"multiChoiceCorrect":506,"multiChoiceIncorrect":508},[505],"What is the name of a practice area on your local computer that replicates the conditions of a real app or website?",[507],"Local development server",[509,510,511],"Local development platform","Internal development server","Internal development platform",{"id":513,"data":514,"type":24,"maxContentLevel":37,"version":24,"reviews":518},"a093618c-240b-4fbb-aae7-5aef1139b053",{"type":24,"title":515,"contentRole":27,"markdownContent":516,"audioMediaId":517},"Version control systems","Version control systems allow Backend Developers to store each iterative version of a program, so if things go wrong in a new version, you can safely roll back to an old version.\n\nThe absence of version control systems would be like walking on a tightrope without a safety net. The risk of losing progress, or introducing irreversible bugs, would loom large.\n\nToday’s most popular version control system is Git. It allows Backend Developers to track changes to their codebase, collaborate with other developers effectively, and easily roll back to previous versions. This makes it a powerful tool for managing complex projects.","0a12c188-40a6-49c1-b18a-b3d68cead6f7",[519],{"id":520,"data":521,"type":60,"version":24,"maxContentLevel":37},"a194ef81-a1a8-4d52-9e7b-4e70b1937efe",{"type":60,"reviewType":27,"spacingBehaviour":24,"binaryQuestion":522,"binaryCorrect":525,"binaryIncorrect":527},[523,524],"What does a version control system allow Backend Developers to do?","What is one of the main purposes of using a version control system for Backend Developers?",[526],"Store older versions of a program",[528],"Create newer versions of a program",{"id":530,"data":531,"type":27,"version":24,"maxContentLevel":37,"pages":533},"054dacef-0b0d-4f6f-acb7-ca638d42c982",{"type":27,"title":532},"Challenges in Backend Development",[534,549],{"id":535,"data":536,"type":24,"maxContentLevel":37,"version":24,"reviews":540},"25f07efb-6c88-4c3f-8aa0-78f40f30c160",{"type":24,"title":537,"contentRole":27,"markdownContent":538,"audioMediaId":539},"Compatibility issues","While backend tools are helpful, they can sometimes lead to problems.\n\nDevelopers may find that certain software versions are incompatible with each other, causing conflicts or errors during installation or execution. For example, if a developer is working on a Python web application, and using Django as the framework, they may encounter issues if they try to install a newer version of Django that is not fully compatible with the other libraries or dependencies in the project.\n\n ![Graph](image://fdc0b63e-1562-4b0b-be41-aa9a1b2a0cf1 \"Django 2.0. Image: 큨, CC BY-SA 4.0 \u003Chttps://creativecommons.org/licenses/by-sa/4.0> via Wikimedia Commons\")\n\nTo troubleshoot this, developers will need to check the system requirements and compatibility of the software versions they are using. It isn't always easy to work it all out, but it will often pay off in the long run.\n\n","9a06294a-7976-4231-920a-97ecbf51dce0",[541],{"id":542,"data":543,"type":60,"version":24,"maxContentLevel":37},"45567133-d29c-4a94-8871-376d177625f4",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":544,"clozeWords":547},[545,546],"When developers run into compatability issues, they should check the system requirements and compatibility of the software versions they are using.","In case of compatibility problems, developers need to inspect the system requirements and the compatibility of their software versions.",[548],"system requirements",{"id":550,"data":551,"type":24,"maxContentLevel":37,"version":24,"reviews":555},"9537f59b-4631-440d-b670-e17f681c0cf8",{"type":24,"title":552,"contentRole":27,"markdownContent":553,"audioMediaId":554},"Constant maintenance","A developer’s tools are not a one-and-done setup. Over time, they'll need to keep on top of updates, or their tools will become outdated and incompatible with newer technologies and best practices.\n\nThis is known as version drift: when a tool receives updates and improvements to fix bugs, add features, and enhance security, but a user continues using an older version.\n\nA developer should also stay on the lookout for better tools than the ones they are using now. There's a lot of redundancy in backend development, with lots of tools that do more-or-less the same thing. But there will always be minor differences, and for each of a Backend Developer's projects, one of these tools might have a slight advantage over another.","207fa2f4-85cf-443a-b8e0-acb114f6638b",[556,567],{"id":557,"data":558,"type":60,"version":24,"maxContentLevel":37},"8791c002-72af-4521-9102-88e343ee3ca8",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":559,"multiChoiceCorrect":561,"multiChoiceIncorrect":563},[560],"When a tool receives updates and improvements, but a user continues using an older version, it is called:",[562],"Version drift",[564,565,566],"Version lag","Version delay","Version drag",{"id":568,"data":569,"type":60,"version":24,"maxContentLevel":37},"99c335a2-d5a0-4e8b-ba0f-b28728686812",{"type":60,"reviewType":246,"spacingBehaviour":24,"matchPairsQuestion":570,"matchPairsPairs":572},[571],"Match the backend tool with a popular example:",[573,575,578,580],{"left":177,"right":574,"direction":37},"Visual Studio Code",{"left":576,"right":577,"direction":37},"Framework","Django",{"left":507,"right":579,"direction":37},"Apache",{"left":581,"right":582,"direction":37},"Version control system","Git",{"id":584,"data":585,"type":29,"maxContentLevel":37,"version":24,"orbs":588},"b830f083-0ba5-4349-be2e-4b1e6de16de3",{"type":29,"title":586,"tagline":587},"Databases","How do developers build databases?",[589,684,747],{"id":590,"data":591,"type":27,"version":24,"maxContentLevel":37,"pages":593},"027c5b64-e09b-4c4a-a8e1-06dfaa46c68e",{"type":27,"title":592},"Introduction to Databases",[594,600,635,658],{"id":595,"data":596,"type":24,"maxContentLevel":37,"version":24},"8ea74b90-82cd-4956-b87b-afb9b26b0122",{"type":24,"title":597,"contentRole":27,"markdownContent":598,"audioMediaId":599},"What are databases?","An essential part of backend development is managing data. For example, when a user presses like on a video on YouTube, the app needs a way to record this data, associating it with the user's account and the specific video ID.\n\n ![Graph](image://36bdee62-7738-4231-a4e4-78da84aa4506 \"Watching YouTube. Image: Public Domain/CC0 1.0 \u003Chttps://creativecommons.org/publicdomain/zero/1.0/> via Pxhere\")\n\nFor Backend Developers, managing data usually involves setting up databases. You can visualize these like electronic filing systems, with thousands and thousands of rows. Without databases, data would be stored haphazardly, making it difficult to find and use. With them, data can be stored in a well-organized structure that's easier to manage and maintain.\n\nDatabases are also easier for developers to build infrastructure around – like the YouTube algorithm that looks at your likes, and recommends similar videos.\n\n","3baf5f1b-147f-4c4f-90ff-a5bde3e6d19b",{"id":601,"data":602,"type":24,"maxContentLevel":37,"version":24,"reviews":606},"f6dce6b8-1dbb-4633-a701-97bd9f2302e3",{"type":24,"title":603,"contentRole":27,"markdownContent":604,"audioMediaId":605},"Relational databases","Relational databases organize data in what we might think of as the “traditional” way – tables and rows, like you’d see on an Excel spreadsheet. \n\nFor example, a record store might have a database with album titles in Column A, artist names in Column B, and the numbers of sales in Column C. This is typically referred to as a database schema; this term describes the structure of each column of data, and the specific data types used in each one, such as text, number, or boolean.\n\nOnce the table structure has been defined, it’s possible to query the database. A query is basically a request to retrieve, update, or otherwise manage data. For example, a Backend Developer could use a query to fetch all the album orders that were made last month, or check whether an artist has been selling well over the summer.\n\nA query is usually written in Structured Query Language, or SQL. This is a special type of programming language.","cc2c5653-02db-4f3c-85c1-64394929e89c",[607,616,624],{"id":608,"data":609,"type":60,"version":24,"maxContentLevel":37},"1d2ffd1c-2408-427f-83e4-f453f3a580ef",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":610,"clozeWords":614},[611,612,613],"Relational databases use tables and rows to organize data, like a traditional Excel spreadsheet.","Relational databases arrange data in tables and rows, similar to a conventional Excel spreadsheet.","Like an ordinary Excel spreadsheet, relational databases structure data using tables and rows.",[615],"Relational",{"id":617,"data":618,"type":60,"version":24,"maxContentLevel":37},"8323ef68-bc43-4e3b-9919-5fa60e06af5c",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":619,"activeRecallAnswers":622},[620,621],"In the context of databases, what is a query?","In database terminology, what is the meaning of 'query'?",[623],"A request to manage data",{"id":625,"data":626,"type":60,"version":24,"maxContentLevel":37},"b346ccce-3f0b-4c7b-a836-3909728d1352",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":627,"multiChoiceCorrect":629,"multiChoiceIncorrect":631},[628],"The way that a relational database is structured is typically called its:",[630],"Schema",[632,633,634],"Query","Model","Comp",{"id":636,"data":637,"type":24,"maxContentLevel":37,"version":24,"reviews":641},"8b117163-1095-4e98-a527-460dc60d3f43",{"type":24,"title":638,"contentRole":27,"markdownContent":639,"audioMediaId":640},"Non-relational databases","Data doesn't always neatly fit into the rows and columns of a relational database. Imagine a company like Ebay, which stores data about millions of different products with completely different properties. For example, a car that runs on diesel, or a toy suitable for 5-year-olds.\n\nIn cases like these, a Backend Developer would use a non-relational database. There are many different examples of this, but one of the most common is a document data store. In a document data store, each product on Ebay would have a 'document' attached to them, like a bucket full of data. A toy’s document might mention the age range, while a car’s document would mention fuel.\n\nA developer will often use a database engine to create their non-relational database. Popular examples include MongoDB, DynamoDB, CouchDB. \n\n ![Graph](image://6719b43f-b95d-492d-afb4-a630fb9a204f \"CouchDB. Image: Wohali, CC BY-SA 4.0 \u003Chttps://creativecommons.org/licenses/by-sa/4.0>, via Wikimedia Commons\")\n\nNon-relational databases are also known as NoSQL databases, because a lot of them don't use SQL for their queries. Instead, they use query structures and syntax that are specific to the database engine of choice.\n\n","f9b15ecd-fdd5-44dd-9479-0714512204bd",[642,650],{"id":643,"data":644,"type":60,"version":24,"maxContentLevel":37},"003a007a-1977-435d-8073-c036746660c9",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":645,"activeRecallAnswers":648},[646,647],"What are non-relational databases also known as?","What is the alternative name for databases that are non-relational?",[649],"NoSQL databases",{"id":651,"data":652,"type":60,"version":24,"maxContentLevel":37},"daa28c7b-8cf1-43b2-b5d2-6d172bd83dbf",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":653,"clozeWords":657},[654,655,656],"Non-relational databases are used for data that doesn't fit easily into traditional rows and columns.","Non-relational databases handle data that isn't suited for conventional row and column structures.","When data can't be neatly organized into rows and columns, non-relational databases can be used.",[638],{"id":659,"data":660,"type":24,"maxContentLevel":37,"version":24,"reviews":664},"7f251828-1f70-4366-91b2-c76d34a6455a",{"type":24,"title":661,"contentRole":27,"markdownContent":662,"audioMediaId":663},"Choosing a database","The right database can make an application run smoothly and efficiently, while the wrong database can lead to performance issues, failures, errors, or just things not going as quickly as you’d like.\n\nWhile traditional relational databases offer consistency and integrity, that can be difficult to scale when websites have massive amounts of data or high traffic. As the data grows, it becomes challenging to make significant changes without disrupting the system and causing downtime. \n\nNoSQL databases, on the other hand, are often designed to scale horizontally, which makes it a lot easier to handle an ever-increasing load but at the expense of having highly structured relational data.\n\nIf data is highly structured, and the application is not expected to scale significantly, a relational database might be the best choice. If the data is less structured, and the application needs to scale rapidly, a NoSQL database is better.","2f60900b-601d-4d2b-9171-b79c4e7a7738",[665,675],{"id":666,"data":667,"type":60,"version":24,"maxContentLevel":37},"06927380-85c5-4a3e-a2ce-90ee730d3d1d",{"type":60,"reviewType":27,"spacingBehaviour":24,"binaryQuestion":668,"binaryCorrect":672,"binaryIncorrect":674},[669,670,671],"If data is less structured, and an application needs to scale rapidly, which type of database is a better choice?","Which kind of database is more suitable when the data is not highly structured and there's a need for rapid scalability in an application?","For an application that requires quick scaling and deals with less structured data, what type of database should be chosen?",[673],"Non-relational",[615],{"id":676,"data":677,"type":60,"version":24,"maxContentLevel":37},"86322f1b-78aa-4105-a745-d64840aa5bdf",{"type":60,"reviewType":27,"spacingBehaviour":24,"binaryQuestion":678,"binaryCorrect":682,"binaryIncorrect":683},[679,680,681],"If data is highly structured, and an application doesn't need to scale rapidly, which type of database is a better choice?","For an application that doesn't require rapid scaling and deals with highly structured data, what kind of database would be the best choice?","What type of database should be chosen for an application that has highly structured data and doesn't need to scale quickly?",[615],[673],{"id":685,"data":686,"type":27,"version":24,"maxContentLevel":37,"pages":688},"6302d060-d2df-4e8e-a2d5-e39523427ae9",{"type":27,"title":687},"Database Design and Optimization",[689,707,722],{"id":690,"data":691,"type":24,"maxContentLevel":37,"version":24,"reviews":695},"8d9f66bf-2ad9-423e-985e-b7ee59f8cd85",{"type":24,"title":692,"contentRole":27,"markdownContent":693,"audioMediaId":694},"Database design principles","After choosing between relational and non-relational databases, Backend Developers will still need to make some other design decisions. No two applications are ever quite the same, which means their database demands will be different.\n\nFor example, a developer will need to think about table design, which means choosing between the structural benefits of storing data in a single big table, versus the better performance of splitting data into separate tables.\n\nThey'll also need to think about normalization, which means minimizing data duplication as much as possible. For instance, instead of storing a user's email address twice, when they make two separate orders, the email address and both of the orders would be stored in a single row.","5bbc6371-75e1-4918-920b-33009651c1e8",[696],{"id":697,"data":698,"type":60,"version":24,"maxContentLevel":37},"3c10d2d6-06da-47cc-b340-750925a7c586",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":699,"multiChoiceCorrect":701,"multiChoiceIncorrect":703},[700],"In the context of databases, what does normalization mean?",[702],"Minimizing data duplication",[704,705,706],"Maximizing data storage","Optimizing data retrieval","Encrypting data",{"id":708,"data":709,"type":24,"maxContentLevel":37,"version":24,"reviews":713},"492e3f54-aa34-4eaf-99e0-325facb23d79",{"type":24,"title":710,"contentRole":27,"markdownContent":711,"audioMediaId":712},"Database performance optimization","While setting up a database, Backend Developers need to optimize performance, and make sure it runs as smoothly and efficiently as possible.\n\nIf a database is slow to retrieve data, it can cause the application to lag, frustrating users and potentially driving them away. Think about how long you’d be happy to wait while a web page loaded for you to order ice cream for delivery.\n\n ![Graph](image://b8df1781-1993-4069-b43e-a87cb0dac79c \"Frustration. Image via Freepik (https://www.freepik.com/free-photo/angry-businessman-yelling-laptop-home_4360411.htm)\")\n\nA developer could improve this problem by working on query optimization – this reduces the time it takes to retrieve data from the database. Efficient use of hardware resources, like the servers the database is hosted on, can also ensure that the database runs smoothly, even when it's receiving a lot of queries at once.\n\n","49e2cfdc-4a03-4f26-a76b-222738436735",[714],{"id":715,"data":716,"type":60,"version":24,"maxContentLevel":37},"5383ff78-8631-45b8-9bc7-3f3d14d7e591",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":717,"activeRecallAnswers":720},[718,719],"What is the purpose of query optimization?","Why is it important for a backend developer to focus on query optimization?",[721],"It reduces the time it takes to retrieve data from a database",{"id":723,"data":724,"type":24,"maxContentLevel":37,"version":24,"reviews":728},"f3c4c64e-69a7-4a52-a806-c5b4c298ba1f",{"type":24,"title":725,"contentRole":27,"markdownContent":726,"audioMediaId":727},"Database management","After setting up a database, a developer's work keeps going. They will now be expected to maintain that database, and make sure it continues to function.\n\nOver time, a database will fill up with data, and potentially start to slow down. Performance monitoring helps identify and fix performance issues like slow response times, high server load, bottlenecks, and resource limitations.\n\nDevelopers should also schedule automated backups of the database, using scripts or tools that create copies of the database at specific intervals, such as daily or weekly. These backups are stored in a secure location, separate from the production environment, to prevent data loss in case of hardware failures, accidental deletions, or other unexpected issues.","c87f2802-84e3-4f60-b02f-26b995d874f8",[729,739],{"id":730,"data":731,"type":60,"version":24,"maxContentLevel":37},"14f734fb-b997-49c8-8187-63270c78f69b",{"type":60,"reviewType":27,"spacingBehaviour":24,"binaryQuestion":732,"binaryCorrect":735,"binaryIncorrect":737},[733,734],"Where should database backups be stored?","Where is it recommended to store any backups of a database?",[736],"Outside the production environment",[738],"Inside the production environment",{"id":740,"data":741,"type":60,"version":24,"maxContentLevel":37},"3c61eac8-25c7-4faa-b65c-6ed3ac74c647",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":742,"clozeWords":745},[743,744],"When managing a database, developers should schedule automated backups to prevent any major data loss.","To avoid significant data loss, developers managing a database should arrange automated backups.",[746],"automated backups",{"id":748,"data":749,"type":27,"version":24,"maxContentLevel":37,"pages":751},"a2b80f85-3d2c-4144-8780-28820715fd5a",{"type":27,"title":750},"Database Management and Security",[752,767],{"id":753,"data":754,"type":24,"maxContentLevel":37,"version":24,"reviews":758},"60c26848-a5fa-4262-9613-db3bb1527917",{"type":24,"title":755,"contentRole":27,"markdownContent":756,"audioMediaId":757},"Database security","Database security is a crucial part of backend development, as it protects sensitive data from unauthorized access and breaches. For example, encryption protects data by making it unreadable to anyone without the decryption key, while user authentication ensures that only authorized users can access a database.\n\nA breach in database security can lead to significant losses, both financially and in terms of trust. In 2021, T-Mobile suffered two high profile security breaches, which resulted in the theft of sensitive customer data. This not only led to financial losses but also damaged the company's reputation.\n\n ![Graph](image://a433df53-a230-4275-814c-8810b1afdedd \"T-Mobile HQ. Image: FMM134, CC BY-SA 2.0 \u003Chttps://creativecommons.org/licenses/by-sa/2.0>, via Wikimedia Commons\")\n\nDatabase security is an ongoing process. New threats are invented by fraudsters every year, and Backend Developers need to stay one step ahead. Regular audits can help to identify vulnerabilities, and ensure that a database's security measures are working as intended.\n\n","fb537091-5272-493f-8caf-f0e479c9718d",[759],{"id":760,"data":761,"type":60,"version":24,"maxContentLevel":37},"936f352a-1124-4690-8ae8-e8a49a659487",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":762,"activeRecallAnswers":765},[763,764],"In order to read encrypted data, what would you need?","What is required to make encrypted data readable?",[766],"The decryption key",{"id":768,"data":769,"type":24,"maxContentLevel":37,"version":24,"reviews":773},"9255b77a-8a38-4708-a300-ba45fccf0d19",{"type":24,"title":770,"contentRole":27,"markdownContent":771,"audioMediaId":772},"DBMs","Database Management Systems (DBMS) are software applications that provide an interface for interacting with the database, making it easier for developers to perform tasks like creating tables, inserting data, and running queries.\n\nDBMS like MySQL and Oracle provide an interface for interacting with databases. This interface can be graphical, allowing developers to interact with the database using a visual interface, or it can be command-line based, requiring developers to type commands to interact with the database.\n\nDBMS not only allow for data storage and retrieval, but also provide functionalities like backup and recovery, security, and data integrity. These features are crucial for maintaining the health and reliability of a database, making DBMS an essential tool for any Backend Developer.","68023944-5396-4205-8ebb-7108c311e6af",[774],{"id":775,"data":776,"type":60,"version":24,"maxContentLevel":37},"a6eb3b32-5291-4a6c-971d-7916b10c24f3",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":777,"multiChoiceCorrect":779,"multiChoiceIncorrect":781},[778],"Which type of software makes it easier for developers to build and maintain a database?",[780],"Database Management Systems",[782,783,784],"Database Maintenance Systems","Database Constructors","Database Controllers",{"id":786,"data":787,"type":29,"maxContentLevel":37,"version":24,"orbs":790},"b52dd281-d3af-46c1-8765-0fdc9f862624",{"type":29,"title":788,"tagline":789},"Data validation","How do developers manage data?",[791,869],{"id":792,"data":793,"type":27,"version":24,"maxContentLevel":37,"pages":795},"bcdf4d21-0a93-4130-a239-aaa81914eea4",{"type":27,"title":794},"Data Validation and Error Handling",[796,811,837,851],{"id":797,"data":798,"type":24,"maxContentLevel":37,"version":24,"reviews":802},"8ea12de9-e895-47d3-906c-2a5a6317925f",{"type":24,"title":799,"contentRole":27,"markdownContent":800,"audioMediaId":801},"What is data validation?","Data validation makes sure that the data entered into a system meets predefined formats. For example, if a database lists weights in kilograms, it could stop a user from entering a weight in grams.\n\nIn 1999, NASA’s Mars Climate Orbiter accidentally disintegrated in Mars’ atmosphere thanks to a data validation issue. One team used metric units (Newtons) for measuring thrust, while another team used English units (pounds). Because of this confusion, the spacecraft approached Mars with too much speed – something that would have been avoided if the data was properly validated.\n\nData validation isn't just about avoiding errors. It also prevents the entry of malicious data, such as inputs that could exploit vulnerabilities or manipulate the system.","d80352a4-15ce-4353-8f97-ce2a8915dc8c",[803],{"id":804,"data":805,"type":60,"version":24,"maxContentLevel":37},"254aef03-680e-4084-ae11-5ecd2dc82cf2",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":806,"clozeWords":809},[807,808],"Data validation ensures that data entered into a system meets predefined formats.","Data validation is the process that confirms data entered into a system fits predefined formats.",[810],"formats",{"id":812,"data":813,"type":24,"maxContentLevel":37,"version":24,"reviews":817},"61957c85-7469-41a4-9afe-d255721e48df",{"type":24,"title":814,"contentRole":27,"markdownContent":815,"audioMediaId":816},"Validation processes","Data validation processes are a set of rules or criteria that data must meet before it is accepted into a system. These rules can be as simple as checking if a field is filled out, or as complex as verifying that a credit card number is valid.\n\nThere are various types of data validation. A range check ensures that a data value isn't too big or too small. A format check makes sure that if you only want numbers, a user can’t input letters. An existence check verifies whether a given data entry corresponds to an existing entity, like when a user is trying to choose a new username, and it can’t be the same as someone else's.\n\nThese processes could be used at the point of data entry, to prevent bad data from entering the system in the first place. They could also be used during data transmission, catching errors that occur when data is moved from one backend system to another.","74cbf933-8871-4ee0-8d16-534eef3f5645",[818,828],{"id":819,"data":820,"type":60,"version":24,"maxContentLevel":37},"87890cbc-c5bd-4816-8845-0129a7a1ebac",{"type":60,"reviewType":27,"spacingBehaviour":24,"binaryQuestion":821,"binaryCorrect":824,"binaryIncorrect":826},[822,823],"In data validation, which check makes sure that a data value is neither too small nor too large?","Which type of data validation check makes sure that an inputted value is not excessively high or low?",[825],"Range check",[827],"Format check",{"id":829,"data":830,"type":60,"version":24,"maxContentLevel":37},"d1459135-ea4b-46d8-a05c-070fc593b8ff",{"type":60,"reviewType":27,"spacingBehaviour":24,"binaryQuestion":831,"binaryCorrect":834,"binaryIncorrect":835},[832,833],"In data validation, which check makes sure that if you only want numbers, a user can't enter letters?","Which type of data validation ensures that a user cannot input numbers when only letters are wanted?",[827],[836],"Existence check",{"id":838,"data":839,"type":24,"maxContentLevel":37,"version":24,"reviews":843},"82490ca6-8bc6-4594-8888-f2bcb9df60c2",{"type":24,"title":840,"contentRole":27,"markdownContent":841,"audioMediaId":842},"Error handling","When data is entered incorrectly, error handling is the safety net: response procedures that protect the system when unacceptable data makes it through the checks.\n\n ![Graph](image://26bf551b-6d05-4d32-9fe9-9738e635a393 \"Log in page. Image: energepic.com via Pexels (https://www.pexels.com/photo/person-holding-phone-while-logging-in-on-instagram-application-174938/)\")\n\nFor example, a Backend Developer might build an app that lets users enter usernames made up of letters. The validation procedures stop users from entering numbers. But the developer forgot about emojis – and when a user enters a poop emoji, the backend doesn't know what to do with it. It tries to save it to a database, where emojis aren't compatible, and the entire system crashes. \n\nThis wouldn't have happened if the developer had put a measure in place that tells the backend how it's meant to respond to unexpected conditions.\n\n","cbfb061b-9398-4ff4-a8e9-1dddee2d1994",[844],{"id":845,"data":846,"type":60,"version":24,"maxContentLevel":37},"764faf7c-2d4c-410c-91bc-5494f60cae92",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":847,"activeRecallAnswers":850},[848,849],"When unacceptable data still makes it through an application's data validation checks, what is the safety net?","What is the system's defense mechanism when unacceptable data manages to make it through?",[840],{"id":852,"data":853,"type":24,"maxContentLevel":37,"version":24,"reviews":857},"6051e6ce-a152-4644-91ea-54bf5b585073",{"type":24,"title":854,"contentRole":27,"markdownContent":855,"audioMediaId":856},"Try-catch blocks","When handling errors, a developer might use a try-catch block. This is a piece of code that works like a piece of protective casing, surrounding another piece of code that the developer thinks might fail. If the code does fail, the try-catch code will detect it, and perform an action to prevent the code from crashing. \n\nFor example, if a poop emoji caused a database to fail its attempts at writing data, a try-catch block would detect this. In response, it would close the database connection to stop the database from crashing, then print an error statement to the console so that the developer sees what happened.\n\nThe code for this try-catch might look like this:\n\n*Try {*\n\n*database.write(“INSERT INTO users (username) VALUES (:poop:);”*\n\n*} catch (error) {*\n\n*database.close()*\n\n*print(“error inserting data into database”)*\n\n*}*\n\n ![Graph](image://b1ba3c9f-6346-4153-9287-ab79597b061e \"Error handling. Image: Subhashish Panigrahi, CC BY-SA 3.0 \u003Chttps://creativecommons.org/licenses/by-sa/3.0>, via Wikimedia Commons\")","069e91e1-095c-44e4-b570-2ed592990aef",[858],{"id":859,"data":860,"type":60,"version":24,"maxContentLevel":37},"c2959dba-8b43-4c37-ab4e-6229426383ac",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":861,"multiChoiceCorrect":863,"multiChoiceIncorrect":865},[862],"A piece of code that works like a protective casing, surrounding another piece of code, is called:",[864],"Try-catch block",[866,867,868],"Error block","Backup block","Test-case block",{"id":870,"data":871,"type":27,"version":24,"maxContentLevel":37,"pages":873},"c448661d-092d-47a7-91dc-0679f64a2792",{"type":27,"title":872},"Testing and Best Practices",[874,889,905],{"id":875,"data":876,"type":24,"maxContentLevel":37,"version":24,"reviews":880},"7a6d0c93-42b4-4c72-adfb-44082d24d919",{"type":24,"title":877,"contentRole":27,"markdownContent":878,"audioMediaId":879},"Testing procedures","Proactive testing allows developers to identify and fix potential issues before they become problems.\n\nThe testing process involves creating scenarios to trigger errors and validate the system's response to these errors. This can involve anything from entering incorrect data to simulating network failures. By testing how the system responds to these scenarios, developers can ensure that their error handling mechanisms are effective, and that their data validation processes are robust.\n\nAutomated testing tools can be used to simulate a variety of error conditions and validate the effectiveness of error handling mechanisms. These tools can save developers time and effort by automating the process of creating and executing test scenarios. They can also provide a more comprehensive and rigorous testing process, ensuring that all potential error conditions are accounted for.","81c439da-fc92-4164-8a39-973d3630150c",[881],{"id":882,"data":883,"type":60,"version":24,"maxContentLevel":37},"68354402-0ccf-4593-a479-3ab0c6988dc7",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":884,"clozeWords":887},[885,886],"Backend Developers should deliberately try to create scenarios that trigger errors, then validate the system's response.","Backend Developers need to deliberately produce scenarios that cause errors, then check how the system responds.",[888],"errors",{"id":890,"data":891,"type":24,"maxContentLevel":37,"version":24,"reviews":895},"b3fd298f-a475-4a26-863d-edede024e189",{"type":24,"title":892,"contentRole":27,"markdownContent":893,"audioMediaId":894},"Useful tools","Backend Developers are not on their own when it comes to data validation and error handling. There are various tools available, ranging from built-in programming language features to standalone software applications.\n\nThese tools provide a range of features that improve efficiency and decrease the likelihood of human error. For example, a developer might use an automated testing tool like Katalon to create and execute meticulous tests that validate aspects of their application, including input fields, form submissions, and error scenarios.\n\n ![Graph](image://498e2d06-83e1-4c4f-8181-06edcb2a81b8 \"Katalon Studio. Image: Katalon LLC, CC BY-SA 4.0 \u003Chttps://creativecommons.org/licenses/by-sa/4.0>, via Wikimedia Commons\")\n\nMost of these tools come with a user-friendly interface for defining test cases, running them across various platforms, and generating detailed reports.","acdda9fc-d21e-4265-b1ca-09d7aa924411",[896],{"id":897,"data":898,"type":60,"version":24,"maxContentLevel":37},"93bd9e34-01c0-40a6-8eaa-786865df6d2c",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":899,"clozeWords":903},[900,901,902],"Backend Developers might use an automated testing tool like Katalon to validate aspects of their application.","Backend Developers could employ an automated testing tool such as Katalon for application validation.","To validate their application, Backend Developers might use an automated testing tool like Katalon.",[904],"automated testing tool",{"id":906,"data":907,"type":24,"maxContentLevel":37,"version":24,"reviews":911},"6fa825e1-56a4-46b7-b445-4a693821f98d",{"type":24,"title":908,"contentRole":27,"markdownContent":909,"audioMediaId":910},"Best practices","When it comes to data validation and error handling, there are a few best practices which are good for developers to follow.\n\nEarly data validation – at the point of entry – makes sure that invalid data is caught and addressed before it enters the backend system. When this happens, a clear error message is important, so that users understand what went wrong. For example, if a user's password is rejected because it has too few letters, the user needs to be told to make their password longer.\n\nAs for error handling, a clear strategy makes sure that errors are all handled in a similar manner, making it easier to diagnose and fix issues. Logging errors is also critical, as it provides a record of what went wrong and when. Overall, developers need to design their programs to handle errors gracefully, reducing the likelihood of crashes.","bfce1a31-cc29-4f5b-a21f-106447f0f625",[912],{"id":913,"data":914,"type":60,"version":24,"maxContentLevel":37},"03519c56-5d6f-4acd-9a98-44fdcf75a563",{"type":60,"reviewType":27,"spacingBehaviour":24,"binaryQuestion":915,"binaryCorrect":918,"binaryIncorrect":920},[916,917],"What is the best practice when a user's input is rejected due to an error?","When a user's input is not accepted due to an error, what is the best course of action?",[919],"Provide a clear error message",[921],"Hide the error from the user",{"id":923,"data":924,"type":29,"maxContentLevel":37,"version":24,"orbs":927},"5e0b7a6d-8ee0-4a0f-b18c-0ec455d86b2c",{"type":29,"title":925,"tagline":926},"APIs","How do developers use APIs?",[928,1057],{"id":929,"data":930,"type":27,"version":24,"maxContentLevel":37,"pages":932},"80c2c362-89eb-40f7-8044-cf3b1a424d65",{"type":27,"title":931},"Understanding APIs",[933,950,994,1022],{"id":934,"data":935,"type":24,"maxContentLevel":37,"version":24,"reviews":939},"cca597c3-070a-47eb-b138-6c362789919c",{"type":24,"title":936,"contentRole":27,"markdownContent":937,"audioMediaId":938},"What are APIs?","APIs, or Application Programming Interfaces, are a way for two unrelated applications to talk to each other. Just like databases, they're an essential part of backend development.\n\nYou can picture an API like a two-way tunnel that connects a pair of applications. A developer can send requests through this tunnel and receive responses in the opposite direction. For example, they might send a request to a weather website, and receive the latest forecasts. They could display those forecasts on a travel app they're building, instead of taking the time to build their own weather prediction system from scratch.\n\nThere are lots of types of API. Web APIs, for instance, allow the interaction between applications over the web, while Database APIs enable communication between an application and a database.","5fde6d9f-e2f9-47a3-9df0-269f60e2c11b",[940],{"id":941,"data":942,"type":60,"version":24,"maxContentLevel":37},"53b83476-4cbb-49e5-991b-8693bb739333",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":943,"clozeWords":948},[944,945,946,947],"APIs, or Application Programming Interfaces, are a way for two unrelated applications to talk to each other.","Application Programming Interfaces, or APIs, facilitate communication between two unrelated applications.","Two unrelated applications can interact with each other through APIs, also known as Application Programming Interfaces.","Application Programming Interfaces (APIs) serve as a bridge for communication between two unrelated applications.",[949],"Application Programming Interfaces",{"id":951,"data":952,"type":24,"maxContentLevel":37,"version":24,"reviews":956},"fb310687-7bb2-47b6-9d14-3dfbed64a643",{"type":24,"title":953,"contentRole":27,"markdownContent":954,"audioMediaId":955},"HTTP","HTTP, or Hypertext Transfer Protocol, is a set of standards which takes care of any data exchange on the web. Understanding these standards is central to understanding APIs.\n\n ![Graph](image://5e962270-afcd-499e-afd2-16e6eaa564b7 \"HTTP. Image: Kulandru mor, CC0, via Wikimedia Commons\")\n\nHTTP relies on methods, also known as verbs. These are simple commands that define what type of action a client wants to perform on a resource. HTTP methods are universally recognized by web servers and clients, which is why they’re so useful, like a common language that every single web application speaks.\n\nSome of the most common HTTP methods are GET, POST, PUT, and DELETE.\n\nGET retrieves data, POST sends new data, PUT updates existing data, and DELETE removes data.","273760d3-18cf-4cfc-8d3d-1bb42ccbc699",[957,965,976],{"id":958,"data":959,"type":60,"version":24,"maxContentLevel":37},"195fc0cf-c80c-45bf-8cd5-106db828f33d",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":960,"activeRecallAnswers":963},[961,962],"HTTP, or Hypertext Transfer Protocol, is a set of standards which takes care of what?","The set of standards known as HTTP, or Hypertext Transfer Protocol, takes care of what?",[964],"Data exchange on the web",{"id":966,"data":967,"type":60,"version":24,"maxContentLevel":37},"f2ecd127-88fc-4f8a-9be0-939038706f7a",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":968,"multiChoiceCorrect":970,"multiChoiceIncorrect":972},[969],"What are HTTP methods also known as?",[971],"Verbs",[973,974,975],"Nouns","Articles","Adverbs",{"id":977,"data":978,"type":60,"version":24,"maxContentLevel":37},"f526259d-cc22-4352-9e5b-b04573e70584",{"type":60,"reviewType":246,"spacingBehaviour":24,"matchPairsQuestion":979,"matchPairsPairs":981},[980],"Match the HTTP method with its function:",[982,985,988,991],{"left":983,"right":984,"direction":37},"GET","Retrieves data",{"left":986,"right":987,"direction":37},"POST","Sends new data",{"left":989,"right":990,"direction":37},"PUT","Updates existing data",{"left":992,"right":993,"direction":37},"DELETE","Removes data",{"id":995,"data":996,"type":24,"maxContentLevel":37,"version":24,"reviews":1000},"96390d18-c375-4b91-8c45-151d9161abf0",{"type":24,"title":997,"contentRole":27,"markdownContent":998,"audioMediaId":999},"RESTful APIs","RESTful APIs are a common type of API. They were first pioneered by Roy Fielding – an influential computer scientist – in 2000.\n\nThe 'REST' stands for Representational State Transfer, which is a set of conventions that guide API design. The main difference between regular APIs, and the RESTful variety, is that a 'normal' API doesn't necessarily follow specific architectural guidelines, whereas every single RESTful API is standardized to REST principles.\n\n ![Graph](image://8cdae934-94fc-4476-97da-2e28640dfab3 \"RESTful API. Image: Ibrahim Wannous, CC BY-SA 4.0 \u003Chttps://creativecommons.org/licenses/by-sa/4.0>, via Wikimedia Commons\")\n\nFielding's work has become a cornerstone in the field of backend development, with RESTful APIs being widely adopted due to their scalability and accessibility.","485ef786-f662-4852-8339-e5506e31cfd2",[1001,1011],{"id":1002,"data":1003,"type":60,"version":24,"maxContentLevel":37},"7ebaeeae-e87f-4995-b2d8-a4db5da54f0d",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":1004,"activeRecallAnswers":1009},[1005,1006,1007,1008],"What main advantage do RESTful APIs have over 'normal' APIs?","What is the primary benefit of using RESTful APIs instead of 'normal' APIs?","What is the key distinction that gives RESTful APIs an edge over 'normal' APIs?","What is the principal advantage that RESTful APIs offer compared to 'normal' APIs?",[1010],"Standardization",{"id":1012,"data":1013,"type":60,"version":24,"maxContentLevel":37},"de28cde8-5f80-47ba-9b89-82c955943fad",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1014,"multiChoiceCorrect":1016,"multiChoiceIncorrect":1018},[1015],"In the context of API design, what does 'REST' stand for?",[1017],"Representational State Transfer",[1019,1020,1021],"Relational State Transfer","Representational State Transition","Relational State Transition",{"id":1023,"data":1024,"type":24,"maxContentLevel":37,"version":24,"reviews":1028},"4c242bfc-1408-4367-af94-30594c208d5a",{"type":24,"title":1025,"contentRole":27,"markdownContent":1026,"audioMediaId":1027},"RESTful constraints","RESTful architecture has several constraints, which help to make sure that RESTful APIs are consistent and scalable.\n\nFor example, the client making the API request, and the server receiving the API request, must be separate entities. This request must also be stateless, which means the server doesn't need to store any information when it receives the client's request.\n\nThere also needs to be a uniform interface – this means a standardized approach to communication, no matter what type of client and server are trying to interact. A key part of this is using HTTP methods to create, read, update, and delete data. These methods, also known as CRUD operations, form the basis of any interactive application.","98ec9db0-3918-41c8-ac64-985bbe08e650",[1029,1040,1049],{"id":1030,"data":1031,"type":60,"version":24,"maxContentLevel":37},"8ba32fc4-b247-4dbc-924e-c5ac88832efd",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1032,"multiChoiceCorrect":1034,"multiChoiceIncorrect":1036},[1033],"In RESTful architecture, the client making the API request, and the server receiving the API request, must be:",[1035],"Separate entities",[1037,1038,1039],"Shared entities","Interchangeable","Interdependent",{"id":1041,"data":1042,"type":60,"version":24,"maxContentLevel":37},"b0b11f1d-6e8d-4daa-b4fb-7719c2a70c63",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":1043,"activeRecallAnswers":1047},[1044,1045,1046],"In RESTful architecture, HTTP methods are used to create, read, update, and delete data. What are these methods also known as?","What term is commonly used to refer to the actions of creating, reading, updating, and deleting data in RESTful architecture?","What is the collective term for the HTTP methods that allow data to be created, read, updated, and deleted in RESTful architecture?",[1048],"CRUD operations",{"id":1050,"data":1051,"type":60,"version":24,"maxContentLevel":37},"b23bdd46-1eb0-4d42-8b49-3ca65a73f444",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":1052,"clozeWords":1055},[1053,1054],"In RESTful architecture, the request must be stateless, meaning the server doesn't store any information.","A request in RESTful architecture must always be stateless, so the server doesn't need to store any information.",[1056],"stateless",{"id":1058,"data":1059,"type":27,"version":24,"maxContentLevel":37,"pages":1061},"e5556106-50a2-4e87-9e95-85ea4afc56f7",{"type":27,"title":1060},"API Endpoints and Implementation",[1062,1080,1111,1127,1145],{"id":1063,"data":1064,"type":24,"maxContentLevel":37,"version":24,"reviews":1068},"7991c4ab-78e1-41e5-bc3d-a0459fe01092",{"type":24,"title":1065,"contentRole":27,"markdownContent":1066,"audioMediaId":1067},"API endpoints","APIs rely on something called endpoints. If the API itself is a tunnel, then the endpoints are doors on the side of an application that this tunnel is able to link to.\n\nIn more literal terms, endpoints are URLs – or Uniform Resource Locators – which function as touchpoints for other applications to access. For example, a government website might have an endpoint called /public-holidays. If a backend developer built a calendar app, they could send a request to /public-holidays, retrieve that data, then display it on their app.\n\nOften, a developer will share documentation that lets other people know how to find their application's endpoints.","91b1a65b-e0c4-45c4-8948-c18c8b8580cd",[1069],{"id":1070,"data":1071,"type":60,"version":24,"maxContentLevel":37},"8edd88cf-f438-4515-aae3-9bbcd82f562e",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1072,"multiChoiceCorrect":1074,"multiChoiceIncorrect":1076},[1073],"In the context of APIs, what is the name of the URLs which function as touchpoints for other applications to access?",[1075],"Endpoints",[1077,1078,1079],"Methods","Doorways","Operators",{"id":1081,"data":1082,"type":24,"maxContentLevel":37,"version":24,"reviews":1086},"39cb5178-ec13-4cd7-b20f-1e511b7f40e8",{"type":24,"title":1083,"contentRole":27,"markdownContent":1084,"audioMediaId":1085},"Implementing endpoints","A Backend Developer might find themselves accessing other people's endpoints – but they'll also find themselves designing endpoints of their own.\n\nTo implement API endpoints, they will need to write code that tells the server how it needs to react when it receives various requests. For example, for a GET request to an endpoint, a developer would write the logic that fetches data from a database or another source, and prepares the data for the response.\n\n ![Graph](image://e348d0d9-6350-4011-bd94-7b94491c6a84 \"GET request. Image: Rplano, CC BY-SA 4.0 \u003Chttps://creativecommons.org/licenses/by-sa/4.0>, via Wikimedia Commons\")\n\nEach API endpoint should have a specific URL path, for example /tasks. Other people will run into a 404 error if their client sends a request to a path that does not exist.","0d53a990-3fbd-4102-8bd0-7ad2c9b0a528",[1087,1100],{"id":1088,"data":1089,"type":60,"version":24,"maxContentLevel":37},"03d3406d-213a-4324-b861-4a99b60bd51e",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1090,"multiChoiceCorrect":1094,"multiChoiceIncorrect":1096},[1091,1092,1093],"Each API endpoint should have a specific URL path, for example:","Can you provide an example of a specific URL path that an API endpoint should have?","What is a typical example of a URL path for an API endpoint?",[1095],"/tasks",[1097,1098,1099],".tasks","(tasks)","!tasks",{"id":1101,"data":1102,"type":60,"version":24,"maxContentLevel":37},"e033e626-83de-4e36-ab99-311bd5c6a2e3",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1103,"multiChoiceCorrect":1105,"multiChoiceIncorrect":1107},[1104],"What type of error will a client get if they send a request to a URL path that does not exist?",[1106],"404 error",[1108,1109,1110],"303 error","202 error","101 error",{"id":1112,"data":1113,"type":24,"maxContentLevel":37,"version":24,"reviews":1116},"c60953f8-a52a-472d-ba36-8258546d0ae8",{"type":24,"title":908,"contentRole":27,"markdownContent":1114,"audioMediaId":1115},"The ideal API is high quality, performs under high load, and is easy to maintain.\n\nBest practices to develop such APIs include using RESTful principles. It’s also a good idea to design intuitive endpoints, which makes the API easy to understand even for people who didn’t develop it. For example, imagine you are looking at an endpoint that reads like:\n\n*GET /api/v1/xyp987*\n\nBy contrast, check out this endpoint:\n\n*GET /api/v1/products*\n\nThe second one is much more clear.","bd922de9-1247-4b0c-b5c9-7f74ca4d438b",[1117],{"id":1118,"data":1119,"type":60,"version":24,"maxContentLevel":37},"56733168-3ca7-4c27-8620-cd91a9287500",{"type":60,"reviewType":27,"spacingBehaviour":24,"binaryQuestion":1120,"binaryCorrect":1123,"binaryIncorrect":1125},[1121,1122],"Developers should design intuitive endpoints. Which of these is better?","Which of these endpoint designs aligns with the best practices for API development?",[1124],"GET /api/v1/products",[1126],"GET /api/v1/xyp987",{"id":1128,"data":1129,"type":24,"maxContentLevel":37,"version":24,"reviews":1133},"8b8ef633-f58a-4969-806a-d936243d49be",{"type":24,"title":1130,"contentRole":27,"markdownContent":1131,"audioMediaId":1132},"Testing endpoints","It’s critical for a developer to test their endpoints, and make sure the response is correct.\n\nAPI testing should cover functionality, performance, security, and error conditions. Functionality testing checks that the API works as expected, performance testing checks how the API performs under load, security testing checks for vulnerabilities, and error condition testing checks how the API handles errors.\n\nThis can be done automatically using testing frameworks, or manually using tools like Postman. Manual testing involves sending requests to the API endpoints and checking the responses by hand.","fee61465-f9bf-4f69-8125-8ce111c7a869",[1134],{"id":1135,"data":1136,"type":60,"version":24,"maxContentLevel":37},"ae6de741-6c21-433c-8735-f023d2a9f566",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1137,"multiChoiceCorrect":1139,"multiChoiceIncorrect":1141},[1138],"What tool can be used for manual testing of API endpoints?",[1140],"Postman",[1142,1143,1144],"Deliverer","Receiver","Mailman",{"id":1146,"data":1147,"type":24,"maxContentLevel":37,"version":24,"reviews":1151},"5af03448-89a7-4773-87c4-0c0d20a7a8cb",{"type":24,"title":1148,"contentRole":27,"markdownContent":1149,"audioMediaId":1150},"API frameworks","Luckily for developers, it’s no longer necessary to write all their APIs from scratch. Many languages have frameworks that provide a structured way to develop APIs, offering pre-built functions and libraries.\n\nChoosing a framework for API development depends on factors such as the programming language, the complexity of the project, and the team's familiarity with the framework.\n\nFor example, if a project requires complex functionality and scalability, a developer might opt for a more robust and feature-rich framework like Ruby on Rails, Django REST framework, or ASP.NET Core.\n\n ![Graph](image://eac2a3b2-ce1f-491d-8d67-86193b2e97ad \"Ruby on Rails. Image: samatoms, CC BY-SA 4.0 \u003Chttps://creativecommons.org/licenses/by-sa/4.0>, via Wikimedia Commons\")","a432e27a-cef1-49b5-a5d2-3c837ef29e76",[1152],{"id":1153,"data":1154,"type":60,"version":24,"maxContentLevel":37},"7a86348c-1e68-4841-84af-3913cb7ac994",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":1155,"clozeWords":1158},[1156,1157],"Many programming languages have frameworks that provide a structured way to develop APIs.","Many programming languages have frameworks that help with the process of creating APIs.",[1159],"frameworks",{"id":1161,"data":1162,"type":29,"maxContentLevel":37,"version":24,"orbs":1165},"2c44e384-fb17-429a-9aad-7106c37818b1",{"type":29,"title":1163,"tagline":1164},"Authentication","How do developers keep systems safe?",[1166,1310],{"id":1167,"data":1168,"type":27,"version":24,"maxContentLevel":37,"pages":1170},"0555beea-e8d1-4e51-840d-51d8ea967ad0",{"type":27,"title":1169},"Authentication and User Management",[1171,1188,1232,1257,1285],{"id":1172,"data":1173,"type":24,"maxContentLevel":37,"version":24,"reviews":1177},"a5e1046d-73e6-4695-8faf-0199b2aab626",{"type":24,"title":1174,"contentRole":27,"markdownContent":1175,"audioMediaId":1176},"What is authentication?","Imagine a passport control station: your identity is verified before you’re granted access to a country. Sometimes you'll need to provide special proof, like a passport or a visa, that you are who you say you are.\n\n ![Graph](image://907ab61c-abc6-4185-b9c2-fef254cb0b93 \"Passport control. Image: Connor Danylenko via Pexels (https://www.pexels.com/photo/photo-of-people-in-airport-2612113/)\")\n\nSimilarly, in backend development, authentication involves verifying the identity of users, typically using a username and password, before granting them access to a system or application.\n\nWithout authentication, systems would be vulnerable to unauthorized access, leading to potential data breaches and other security issues. Can you imagine the horror of someone getting access to your Facebook message history? You probably have first-hand experience with many authentication methods already.","2c88786a-9c0d-467b-b92a-6e86bb99335a",[1178],{"id":1179,"data":1180,"type":60,"version":24,"maxContentLevel":37},"1d22a390-217b-4928-95cb-5456c5ffa2d3",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1181,"multiChoiceCorrect":1183,"multiChoiceIncorrect":1184},[1182],"In backend development, what process verifies the identity of users before granting them access to a system or application?",[1163],[1185,1186,1187],"Authorization","Encryption","Decryption",{"id":1189,"data":1190,"type":24,"maxContentLevel":37,"version":24,"reviews":1194},"fee2e577-5fec-40a9-9b3f-7ac63a8d9624",{"type":24,"title":1191,"contentRole":27,"markdownContent":1192,"audioMediaId":1193},"User registration","User registration is a crucial process in backend development. This typically involves a username and password, which are used to authenticate the user during the login process.\n\n ![Graph](image://2080e77b-b654-4ec3-98f4-4771e31dba60 \"Login form. Image: MZMcBride, Public domain, via Wikimedia Commons\")\n\nHow does a login actually work? To your web browser, the string of characters making up your username and password are just random text. But behind the scenes, backend logic compares the entered password with the stored password. If the two match, you’re granted access to the system. A Backend Developer can force a user to create a strong password by rejecting any passwords that do not contain a mix of letters and numbers.\n\nTo make this process more secure, developers can implement multi-factor authentication (MFA). This system requires users to provide two or more forms of identity verification, such as a password and a one-time code sent to their mobile device, which will all be confirmed by the backend. With MFA, even if a hacker got hold of your password, they wouldn't be able to log in.","fd96e0d3-77b5-489e-ada7-761fb169e884",[1195,1213,1224],{"id":1196,"data":1197,"type":60,"version":24,"maxContentLevel":37},"459409d9-b5da-47a0-a39a-5626b3735636",{"type":60,"reviewType":246,"spacingBehaviour":24,"matchPairsQuestion":1198,"matchPairsPairs":1200},[1199],"Rank from most secure (1) to least secure (4):",[1201,1204,1207,1210],{"left":1202,"right":1203,"direction":37},"(1)","Multi-factor autentication",{"left":1205,"right":1206,"direction":37},"(2)","Password with letters & numbers",{"left":1208,"right":1209,"direction":37},"(3)","Password with only letters",{"left":1211,"right":1212,"direction":37},"(4)","No password",{"id":1214,"data":1215,"type":60,"version":24,"maxContentLevel":37},"64c1329a-0856-45c5-b161-63d3a7bc7fc4",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1216,"multiChoiceCorrect":1218,"multiChoiceIncorrect":1220},[1217],"Why might a Backend Developer decide to implement multi-factor authentication?",[1219],"Better security",[1221,1222,1223],"Faster registration","Easier programming","Cheaper software",{"id":1225,"data":1226,"type":60,"version":24,"maxContentLevel":37},"fc0dda51-cd7d-41b2-86c0-daaf6d232d64",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":1227,"clozeWords":1230},[1228,1229],"Backend logic compares a user's entered password to a user's stored password.","Backend logic checks if the user's entered password aligns with the stored password.",[1231],"stored password",{"id":1233,"data":1234,"type":24,"maxContentLevel":37,"version":24,"reviews":1238},"b54ee9a7-98f6-4ea6-89cf-9154e9a569de",{"type":24,"title":1235,"contentRole":27,"markdownContent":1236,"audioMediaId":1237},"Hashing","If a user's login details are stored in a database, this database needs to be secure.\n\nEnter hashing: instead of storing a plaintext file of your password, your password is transformed into a unique value by a special hashing algorithm. Even if the hashed password is stolen, the original password can’t just be read from the file. This is something a Backend Developer can set up using a hashing function like bcrypt.\n\n ![Graph](image://a9176baa-4c75-4aeb-b13f-94d155909956 \"Hash function. Image: helix84, Public domain, via Wikimedia Commons\")\n\nSometimes a 'salt', or a random string of characters, is added to the user's password before it is hashed. This makes it significantly more difficult for attackers to decipher the password again, thereby providing an additional layer of security.","43e2bb49-55e6-45b4-a9e4-37338530d287",[1239,1247],{"id":1240,"data":1241,"type":60,"version":24,"maxContentLevel":37},"1a71f220-d169-4ddc-9924-522ac37043a0",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":1242,"activeRecallAnswers":1245},[1243,1244],"Sometimes a 'salt' is added to a user's password before hashing. But what is a salt?","In terms of password security, what does the term 'salt' refer to?",[1246],"A random string of characters",{"id":1248,"data":1249,"type":60,"version":24,"maxContentLevel":37},"b5ce736e-e65e-4cb5-980a-230e89776f43",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1250,"multiChoiceCorrect":1252,"multiChoiceIncorrect":1253},[1251],"Using a special algorithm to turn a user's password into a unique value, rather than a plaintext file, is called what?",[1235],[1254,1255,1256],"Salting","Tagging","Coding",{"id":1258,"data":1259,"type":24,"maxContentLevel":37,"version":24,"reviews":1263},"398cd9ca-e5c4-4e58-8e66-471b695c7d80",{"type":24,"title":1260,"contentRole":27,"markdownContent":1261,"audioMediaId":1262},"Tokens","As you've probably noticed, some websites let you stay logged in, even after you've walked away or completely turned off your computer.\n\nThis is achieved using authentication tokens. In basic terms, when you first log in, the website sends you a token, which is typically stored in your browser. When you open the website up again, it detects that token, and does not ask for your log in details again.\n\nJSON Web Token (JWT) is a popular standard for creating authentication tokens. JWTs are compact, self-contained tokens that contain all the necessary information to authenticate the user. They are typically used in stateless authentication mechanisms, where the server does not need to keep a record of the user's session. In stateless authentication, because all the user info is contained within the JWT itself, the server can validate the user without needing any extra storage for sessions.\n","02dd7037-e681-4b7b-b923-6c7d0118ca0e",[1264,1275],{"id":1265,"data":1266,"type":60,"version":24,"maxContentLevel":37},"2a6483be-fdca-470f-94d0-57ef76706168",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1267,"multiChoiceCorrect":1269,"multiChoiceIncorrect":1271},[1268],"What is a popular standard for creating authentication tokens?",[1270],"JSON Web Token",[1272,1273,1274],"Java Web Token","JavaScript Web Token","JSOM Web Token",{"id":1276,"data":1277,"type":60,"version":24,"maxContentLevel":37},"67f291b7-b15f-44d3-a810-1e612381e5d8",{"type":60,"reviewType":27,"spacingBehaviour":24,"binaryQuestion":1278,"binaryCorrect":1281,"binaryIncorrect":1283},[1279,1280],"What are authentication tokens used for?","What is the purpose of authentication tokens on websites?",[1282],"They keep you logged in when you return to a website",[1284],"They make sure you're logged out when you leave a website",{"id":1286,"data":1287,"type":24,"maxContentLevel":37,"version":24,"reviews":1291},"5960aaa6-7758-4f1e-9abc-2753f303bb13",{"type":24,"title":1288,"contentRole":27,"markdownContent":1289,"audioMediaId":1290},"Cookies","Cookies are small pieces of data stored on a user's browser. You’re probably most familiar with marketing and advertising cookies, but they can be used for authentication too.\n\nA good example of this is Single Sign-On (SSO). This system is useful when you have a suite of applications like Gmail, Google Docs, Google Sheets, Google Slides and Google Classroom. You have the same login details for all of them, and don't want to enter those details over and over again – and with SSO, you won't have to. A cookie tells your browser that you've already logged into Gmail, so you're given instant access to all those other places too.\n\nTo enhance the security of cookies, developers can use Secure flags. The Secure flag ensures that the cookie is only sent over secure (HTTPS) connections, and can't be snatched up by hackers.","b9397d3d-81b0-44f4-889e-87305cf82af6",[1292,1302],{"id":1293,"data":1294,"type":60,"version":24,"maxContentLevel":37},"b6b633a8-6981-4838-9701-3c48584812b5",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1295,"multiChoiceCorrect":1297,"multiChoiceIncorrect":1298},[1296],"Small pieces of data stored on a user's browser are known as:",[1288],[1299,1300,1301],"Biscuits","Crackers","Chips",{"id":1303,"data":1304,"type":60,"version":24,"maxContentLevel":37},"fe3bb2ff-136b-4b6d-ad5c-0ca9f7b7f9cf",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":1305,"activeRecallAnswers":1308},[1306,1307],"To enhance the security of cookies, what can developers use?","What method can developers use to increase the security of cookies?",[1309],"Secure flags",{"id":1311,"data":1312,"type":27,"version":24,"maxContentLevel":37,"pages":1314},"8b540513-7304-481f-9e44-00db626c4b8d",{"type":27,"title":1313},"Security Measures and Testing",[1315,1338],{"id":1316,"data":1317,"type":24,"maxContentLevel":37,"version":24,"reviews":1321},"82f7d018-a914-4ccb-b04c-58b6ced0b4b1",{"type":24,"title":1318,"contentRole":27,"markdownContent":1319,"audioMediaId":1320},"Endpoint security","User logins are not the only security concern for developers. API endpoints are like doors into the sides of their applications – and for obvious reasons, these doors should be secure as well.\n\nA great approach is something called Transport Layer Security (TLS). Basically, when two sides begin to exchange data using an API, they will also exchange a key. This key is used to encrypt and decrypt all the data shared between them.\n\n ![Graph](image://bd201ad8-87cf-452a-8a99-770403a3cb39 \"TLS protocol stack. Image: Gorivero, CC BY 3.0 \u003Chttps://creativecommons.org/licenses/by/3.0>, via Wikimedia Commons\")\n\nTLS makes sure that the data flying between API endpoints is secure. Even if a hacker managed to eavesdrop on the exchange of data, they would not be able to decrypt it.","86762d9b-4247-455b-889e-fbb2d015d4e2",[1322,1330],{"id":1323,"data":1324,"type":60,"version":24,"maxContentLevel":37},"32ffeb49-41ed-4726-a59a-a5efc1f5b429",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":1325,"clozeWords":1328},[1326,1327],"Transport Layer Security (TLS) is used to encrypt and decrypt data shared between API endpoints.","Data exchanged between API endpoints is encrypted and decrypted using Transport Layer Security (TLS).",[1329],"Transport Layer Security",{"id":1331,"data":1332,"type":60,"version":24,"maxContentLevel":37},"60e1ba23-97f5-4ac9-8ec7-6e3cc9a9f823",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":1333,"activeRecallAnswers":1336},[1334,1335],"How does Transport Layer Security work?","Can you explain how Transport Layer Security works?",[1337],"When two sides exchange data using an API, they will also exchange a security key",{"id":1339,"data":1340,"type":24,"maxContentLevel":37,"version":24,"reviews":1344},"7bec42b0-c928-4833-b179-65b16b0392d6",{"type":24,"title":1341,"contentRole":27,"markdownContent":1342,"audioMediaId":1343},"Testing","As a Backend Developer, it's not enough to create authentication and security mechanisms – they also need to check that those measures work.\n\nMany Backend Developers use a technique called penetration testing. This involves simulating attacks on the system in order to identify potential weaknesses. For example, a developer might deliberately attempt an SQL injection, which is when you intentionally input malicious code into a database. If this injection works, then the Backend Developer can fix it. If it fails, then it's obviously nothing they need to worry about.\n\nIn 2012, Yahoo! suffered a SQL injection that resulted in a breach of 450,000 Yahoo! user credentials. The hackers entered malicious data into the database, and the application “read” that data as a command to spit out sensitive user information.\n\nAutomated security testing tools, such as OWASP ZAP, can also be used to identify common security vulnerabilities.","615a74d0-e17c-4c81-b0d8-21f20b9ba7f1",[1345,1354],{"id":1346,"data":1347,"type":60,"version":24,"maxContentLevel":37},"de51a772-4d4f-48b7-b570-2304f985306c",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":1348,"clozeWords":1352},[1349,1350,1351],"An SQL injection is when someone deliberately inputs malicious code into a database.","A SQL injection is when malicious code is intentionally inserted into a database.","When someone purposely inputs malicious code into a database, it's called a SQL injection.",[1353],"malicious code",{"id":1355,"data":1356,"type":60,"version":24,"maxContentLevel":37},"f43b111a-8aa5-414c-b452-4ad825e642bd",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1357,"multiChoiceCorrect":1359,"multiChoiceIncorrect":1361},[1358],"In the context of backend development, what is penetration testing?",[1360],"Simulating attacks on a system",[1362,1363,1364],"Sending test requests to APIs","Turning a system off and on","Updating local hash keys",{"id":1366,"data":1367,"type":29,"maxContentLevel":37,"version":24,"orbs":1370},"948de718-d6bc-4abb-8272-8453e4241f1d",{"type":29,"title":1368,"tagline":1369},"Debugging","How do developers debug their code?",[1371,1414,1500],{"id":1372,"data":1373,"type":27,"version":24,"maxContentLevel":37,"pages":1375},"22e9d598-d14b-40de-8b26-1b68e10cf2f0",{"type":27,"title":1374},"Understanding Debugging",[1376,1391,1408],{"id":1377,"data":1378,"type":24,"maxContentLevel":37,"version":24,"reviews":1382},"68b77541-6ace-40a4-99f3-417da802047f",{"type":24,"title":1379,"contentRole":27,"markdownContent":1380,"audioMediaId":1381},"What is debugging?","Debugging is the process of finding and fixing errors, or 'bugs', in computer programs. The reality of backend development is that not everything will go as planned.\n\n ![Graph](image://7a195918-aefc-48f3-8419-9e8e50bf3bb5 \"Debugging. Image: Kai Hendry, CC BY 2.0 \u003Chttps://creativecommons.org/licenses/by/2.0>, via Wikimedia Commons\")\n\nThere's a popular story that 'debugging' is named after literal bugs. According to this story, a Harvard software developer, Admiral Grace Hopper, coined the term when one of her colleagues found a moth trapped in one of the university computers, preventing the system from working. The moth had to be removed, or 'debugged', before the system started working again.\n\nThis story is probably an urban myth, but it's a good way to remember the term.","2810827d-7d7a-42c0-8e67-69622902b2bd",[1383],{"id":1384,"data":1385,"type":60,"version":24,"maxContentLevel":37},"b836622c-c290-4aa2-b2b9-319bab2af960",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":1386,"clozeWords":1389},[1387,1388],"The term 'debugging' was allegedly coined by Admiral Grace Hopper when a moth was found in a computer.","Admiral Grace Hopper is said to have coined the term 'debugging' after discovering a moth in a computer.",[1390],"debugging",{"id":1392,"data":1393,"type":24,"maxContentLevel":37,"version":24,"reviews":1397},"cdc64224-150c-4c6e-843d-6acf4b2545e3",{"type":24,"title":1394,"contentRole":27,"markdownContent":1395,"audioMediaId":1396},"Common bugs","Common issues that come up during debugging include syntax errors, logical errors, and runtime errors.\n\nSyntax errors are mistakes in the code's syntax, like a missing parenthesis or a misspelled keyword. Logical errors are mistakes in the program's logic, like when a developer writes a function that should take an average of some numbers, but wrote the formula incorrectly, and calculated a sum instead.\n\n ![Graph](image://75b00be9-0633-48e1-888f-7a96013eb670 \"Syntax errors. Image: Tyrank411, CC BY-SA 4.0 \u003Chttps://creativecommons.org/licenses/by-sa/4.0>, via Wikimedia Commons\")\n\nRuntime errors occur while the program is running. They can be caused by a variety of issues, like if the programmer put the code in a position where a number would be divided by zero. These errors often result in the program crashing or behaving unpredictably.","4d00bcb5-86ca-49f8-8899-f3000080bd63",[1398],{"id":1399,"data":1400,"type":60,"version":24,"maxContentLevel":37},"23986ad9-e104-4a8c-8ef8-f08b89421bf7",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":1401,"activeRecallAnswers":1404},[1402,1403],"What are three common types of error that come up during debugging?","During debugging, what are three typical types of error that developers encounter?",[1405,1406,1407],"Syntax errors","Logical errors","Runtime errors",{"id":1409,"data":1410,"type":24,"maxContentLevel":37,"version":24},"b3bf8514-810c-4175-9b43-9a849798ee89",{"type":24,"title":1411,"contentRole":27,"markdownContent":1412,"audioMediaId":1413},"Fixing bugs","Developers should take a systematic approach to debugging: form a hypothesis about the cause of the error, test this hypothesis, interpret the results, then come up with a solution.\n\n ![Graph](image://82dccc60-7d48-4ed4-888f-27c95d10ca41 \"Hypothesis testing. Image: Brightyellowjeans, CC BY-SA 4.0 \u003Chttps://creativecommons.org/licenses/by-sa/4.0>, via Wikimedia Commons\")\n\nAs part of the hypothesis testing stage, it is helpful to reproduce the error. This involves recreating the conditions under which the error occurred in order to better understand its cause.\n\nKeeping a debugging log is also helpful. This log records the steps taken during the debugging process, allowing developers to track their progress and avoid repeating the same steps twice. It serves as a valuable reference that can help streamline the debugging process.","dcdbbdcf-14f6-4888-a540-e7123edf5140",{"id":1415,"data":1416,"type":27,"version":24,"maxContentLevel":37,"pages":1418},"fa44d724-5023-4063-815c-72338c4a0126",{"type":27,"title":1417},"Testing and Debugging Techniques",[1419,1436,1451,1467],{"id":1420,"data":1421,"type":24,"maxContentLevel":37,"version":24,"reviews":1425},"cdd0c994-7020-4ab8-92de-8e869c46a541",{"type":24,"title":1422,"contentRole":27,"markdownContent":1423,"audioMediaId":1424},"Unit testing","Debugging an entire program at once can be a daunting task, which is why Backend Developers use unit testing.\n\nUnit testing verifies the individual parts, or units, of a computer program, instead of seeing whether the entire program works all at once. This approach ensures each part of the program works correctly before they are integrated together.\n\nImagine baking a cake. Unit testing would involve individually inspecting each ingredient in the cake – smelling the eggs, sifting the flour, proofing the yeast – before putting it into the mix. That way, it’s easier to pinpoint any bad ingredients in advance. This approach is much easier than baking the cake, discovering it tastes bad, then trying to work out which ingredient was wrong in hindsight.","b42a1e84-0d66-4624-9bf1-cdcb3a4a112e",[1426],{"id":1427,"data":1428,"type":60,"version":24,"maxContentLevel":37},"7081055a-bbbf-4fad-b9e2-db8c74596db5",{"type":60,"reviewType":27,"spacingBehaviour":24,"binaryQuestion":1429,"binaryCorrect":1432,"binaryIncorrect":1434},[1430,1431],"In the context of computer programming, what is the purpose of unit testing?","What is the main objective of unit testing in the field of computer programming?",[1433],"Debugging the parts of a program",[1435],"Debugging the program as a whole",{"id":1437,"data":1438,"type":24,"maxContentLevel":37,"version":24,"reviews":1442},"8764f043-d210-42c0-b3a5-18fa75254921",{"type":24,"title":1439,"contentRole":27,"markdownContent":1440,"audioMediaId":1441},"Test cases","During unit testing, Backend Developers write test cases for each unit. These test cases are designed to check if the unit behaves as expected under different conditions.\n\nFor example, for a unit of code that calculates the square of a number, a developer might test if the code returns the correct square for a positive number, for a negative number, for zero, and so on.\n\nAutomated tools can simplify the process of unit tests. Tools like JUnit and NUnit can execute a suite of different tests and provide a detailed report of the results.","ddbfede3-39a7-4074-b282-cfcfbd5cd1f7",[1443],{"id":1444,"data":1445,"type":60,"version":24,"maxContentLevel":37},"6c924e9d-fc7f-457f-a593-0caa1caed925",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":1446,"clozeWords":1449},[1447,1448],"Unit testing involves Backend Developers writing test cases for each code unit.","During unit testing, Backend Developers create test cases for every code unit.",[1450],"test cases",{"id":1452,"data":1453,"type":24,"maxContentLevel":37,"version":24,"reviews":1457},"f161f72b-292b-42c2-aa0a-3cc8da1b3edd",{"type":24,"title":1454,"contentRole":27,"markdownContent":1455,"audioMediaId":1456},"Integration testing","While unit testing is important, Backend Developers also need to make sure that these units still work when combined together as a whole. That’s why developers do integration testing too.\n\nIntegration testing is when individual units are combined and tested as a group. For example, you might have a backend application that includes different modules responsible for user authentication, data processing, and API interactions. Integration testing ensures that these modules work harmoniously when combined.\n\n ![Graph](image://25040645-94db-4fa4-9e59-57062328acdd \"Unit testing, integration testing, system testing. Image: Jouasse, CC BY-SA 4.0 \u003Chttps://creativecommons.org/licenses/by-sa/4.0>, via Wikimedia Commons\")\n\nTo use another cake analogy: unit testing can check that your cocoa powder tastes good, and your lemon zest tastes good, but integration testing makes sure that the chocolate and the lemon taste good when you put them together.","2aaba6a7-3702-4f95-8f37-c78c8e61efce",[1458],{"id":1459,"data":1460,"type":60,"version":24,"maxContentLevel":37},"efa9411e-d5ff-461a-8881-520bad178a3f",{"type":60,"reviewType":27,"spacingBehaviour":24,"binaryQuestion":1461,"binaryCorrect":1465,"binaryIncorrect":1466},[1462,1463,1464],"In the context of computer programming, what is the purpose of integration testing?","In computer programming, why is integration testing carried out?","Can you explain the role of integration testing in the field of computer programming?",[1435],[1433],{"id":1468,"data":1469,"type":24,"maxContentLevel":37,"version":24,"reviews":1473},"663b0765-9ca4-41ac-aab6-f1849ea0deab",{"type":24,"title":1470,"contentRole":27,"markdownContent":1471,"audioMediaId":1472},"Different approaches","If a developer starts with unit testing, before moving onto integration testing, it is sometimes described as a bottom-up approach – focusing on the small parts, then worrying about the larger system later.\n\nAnother developer might take a top-down approach – they will start by testing the integration of the overall system, before focusing on perfecting each individual unit.\n\nChoosing between these two approaches depends on the nature of the project and the developer's personal preference. The bottom-up is good at pinpointing specific code issues, but may miss larger integration issues. Top-down debugging will catch larger integration issues, but might overlook specific lower-level bugs.","53947ee4-9afd-43bd-b331-173f6cd76e68",[1474,1482,1492],{"id":1475,"data":1476,"type":60,"version":24,"maxContentLevel":37},"6b77ae8a-8c23-4087-a303-117f068900c2",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":1477,"activeRecallAnswers":1480},[1478,1479],"During backend testing, what might a top-down approach overlook?","In the context of backend testing, what could potentially be missed when employing a top-down strategy?",[1481],"Specific lower-level bugs",{"id":1483,"data":1484,"type":60,"version":24,"maxContentLevel":37},"779e68a9-cdb2-4370-a9b3-57cd2e798fac",{"type":60,"reviewType":27,"spacingBehaviour":24,"binaryQuestion":1485,"binaryCorrect":1488,"binaryIncorrect":1490},[1486,1487],"An approach that starts with integration testing, then moves onto unit testing, is called:","What is the name of the testing approach that starts with integration testing before moving onto unit testing?",[1489],"Top-down approach",[1491],"Bottom-up approach",{"id":1493,"data":1494,"type":60,"version":24,"maxContentLevel":37},"f26c8ea2-ea35-4e60-8aa6-927387aaac8f",{"type":60,"reviewType":27,"spacingBehaviour":24,"binaryQuestion":1495,"binaryCorrect":1498,"binaryIncorrect":1499},[1496,1497],"An approach that starts with unit testing, then moves onto integration testing, is called:","What is the name of the testing approach that starts with unit testing before moving onto integration testing?",[1491],[1489],{"id":1501,"data":1502,"type":27,"version":24,"maxContentLevel":37,"pages":1504},"b60123fe-26b0-458c-b22a-408713a4dcdb",{"type":27,"title":1503},"Advanced Debugging Strategies",[1505,1543,1558],{"id":1506,"data":1507,"type":24,"maxContentLevel":37,"version":24,"reviews":1511},"5a1814df-061b-47c4-9a76-8866f7587e86",{"type":24,"title":1508,"contentRole":27,"markdownContent":1509,"audioMediaId":1510},"Stubs and drivers","Developers taking a top-down approach will run into a problem: how do you test the integration of units when some of those units don't exist yet? The solution is something called stubs and drivers: placeholder units that developers use to simulate the behavior of units that haven't been built yet.\n\nA stub is a simplified version of a unit, which basically works as a test dummy. Another unit can interact with it, and those interactions can be tested and debugged, but the unit itself isn't capable of doing much else.\n\nA driver, on the other hand, is used to send inputs to other units, so that developers can check whether those units are handling these inputs correctly. For example, a developer may have built a database to store usernames, but they haven't yet built a unit for user registration. They can still test if the database is working correctly by using a driver to generate some usernames, then observe how the database handles them.\n\n","81035c9e-f33a-436a-98f6-5ecba22a8238",[1512,1523,1532],{"id":1513,"data":1514,"type":60,"version":24,"maxContentLevel":37},"01315a9b-31a5-4308-affd-dc1127748d22",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1515,"multiChoiceCorrect":1517,"multiChoiceIncorrect":1519},[1516],"In the context of backend development, what does a driver do?",[1518],"Send inputs to other units",[1520,1521,1522],"Receive outputs from other units","Debug other units","Observe other units",{"id":1524,"data":1525,"type":60,"version":24,"maxContentLevel":37},"6c1f9ecc-7213-4793-b81e-d8c70cb20dc3",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":1526,"activeRecallAnswers":1529},[1527,1528],"When a developer takes a top-down approach, what two tools can they use as placeholders for units that don't exist yet? ","In a top-down development approach, which two tools can act as stand-ins for units that are yet to be created?",[1530,1531],"Stubs","Drivers",{"id":1533,"data":1534,"type":60,"version":24,"maxContentLevel":37},"befb9fa2-2bb3-4c3c-97a2-ddcb2515b762",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1535,"multiChoiceCorrect":1537,"multiChoiceIncorrect":1539},[1536],"In the context of backend development, what is a stub?",[1538],"A simplified version of a unit",[1540,1541,1542],"A complex version of a unit","A final version of a unit","A broken version of a unit",{"id":1544,"data":1545,"type":24,"maxContentLevel":37,"version":24,"reviews":1549},"09a57ac3-73a0-4475-990e-c4fab851c3bb",{"type":24,"title":1546,"contentRole":27,"markdownContent":1547,"audioMediaId":1548},"Debugging tools","Debugging tools are invaluable aids for developers in identifying and fixing errors in their code. These tools provide a range of features that simplify the debugging process and make it more efficient.\n\nDebugging tools offer features like breakpoints and call stack visibility. Breakpoints are points in the code where the debugger will pause the execution, allowing a developer to inspect the program's state at that specific moment. Call stack visibility is a feature that displays the sequence of calls that led to the current point in the code. This hierarchy is essential for understanding the flow of a program, and identifying the path that led to a particular issue.\n\nThere are many debugging tools available, each with its unique features and capabilities. Some of the popular ones include Visual Studio Debugger, Chrome Dev Tools, and Firebug.\n\n","e9c5cbb6-2934-41a8-935e-3c7d1dbe2f84",[1550],{"id":1551,"data":1552,"type":60,"version":24,"maxContentLevel":37},"978323c2-77d8-44cf-8461-b345fd327215",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":1553,"activeRecallAnswers":1556},[1554,1555],"Debugging tools offer features like breakpoints. But what are breakpoints?","What is the function of breakpoints in the context of debugging tools?",[1557],"Points in the code where the developer can pause the execution",{"id":1559,"data":1560,"type":24,"maxContentLevel":37,"version":24,"reviews":1564},"b3dce6de-e097-47a1-90da-7824e950a918",{"type":24,"title":1561,"contentRole":27,"markdownContent":1562,"audioMediaId":1563},"Overcoming frustration","Debugging can be frustrating, but it's an essential part of a Backend Developers role.\n\nA failure to do proper debugging can lead to the accumulation of something called 'technical debt'. This is the idea of taking shortcuts or making compromises during the development process, which ultimately results in suboptimal code quality, and a lot more work when issues pop up down the line. Debugging helps to keep that future work – or technical debt – as low as possible.\n\nDebugging can also feel less daunting when developers engage in collaborative code reviews, also known as pull requests. These are processes by which a group of developers examine, analyze, and provide feedback on each other's code.","bea4a432-5cca-4bbe-b601-5b20daa3c327",[1565,1573],{"id":1566,"data":1567,"type":60,"version":24,"maxContentLevel":37},"181b7a30-9d8f-4311-8764-68d110d2f3cf",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":1568,"activeRecallAnswers":1571},[1569,1570],"What are pull requests?","In the context of coding, what is the meaning of 'pull requests'?",[1572],"Collaborative code reviews",{"id":1574,"data":1575,"type":60,"version":24,"maxContentLevel":37},"558b0485-a0f9-4306-8a77-3b9ab7e4a142",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1576,"multiChoiceCorrect":1578,"multiChoiceIncorrect":1580},[1577],"What is it called when a developer takes shortcuts during the development process, leading to a lot more work when issues come up down the line?",[1579],"Technical debt",[1581,1582,1583],"Code debt","Debugging debt","Development debt",{"id":1585,"data":1586,"type":29,"maxContentLevel":37,"version":24,"orbs":1589},"d8d832ba-7014-4bc8-ab2f-449540422da7",{"type":29,"title":1587,"tagline":1588},"Deployment","How do developers deploy their code?",[1590,1679],{"id":1591,"data":1592,"type":27,"version":24,"maxContentLevel":37,"pages":1594},"fe979123-c8b9-4954-8d38-ef9cadc36f4e",{"type":27,"title":1593},"Understanding Deployment",[1595,1621,1638,1653],{"id":1596,"data":1597,"type":24,"maxContentLevel":37,"version":24,"reviews":1601},"34316b8b-81e4-41db-aa9f-839ec3502b05",{"type":24,"title":1598,"contentRole":27,"markdownContent":1599,"audioMediaId":1600},"What is deployment?","Backend Developers spend a lot of their time building their application in a sandbox-like development environment.\n\nBut eventually, the moment for deployment will arrive – when developers make their application public, and users can start to use it.\n\nWhen an application is ready for deployment, it’s then shifted to a production environment – also called a prod environment. Imagine the difference between a development environment and a production environment as the difference between practicing a speech in the mirror, versus presenting it to an actual audience.\n\n ![Graph](image://88548ab0-f76f-4f18-a157-7176fc063224 \"Backend developers. Image: gdsteam, CC BY 2.0 \u003Chttps://creativecommons.org/licenses/by/2.0/>, via Flickr\")","c5c92011-1f32-4c75-8cba-41e0b834e279",[1602,1613],{"id":1603,"data":1604,"type":60,"version":24,"maxContentLevel":37},"0d9c4946-f7e4-4b76-ad0c-9c36673cfb7b",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1605,"multiChoiceCorrect":1607,"multiChoiceIncorrect":1609},[1606],"The environment where developers build their application is known as:",[1608],"Development environment",[1610,1611,1612],"Production environment","Deployment environment","Preparation environment",{"id":1614,"data":1615,"type":60,"version":24,"maxContentLevel":37},"b2c152dd-4da1-4d9d-bbcb-47cfb9533f85",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":1616,"clozeWords":1619},[1617,1618],"When an application is ready for deployment, it's shifted to a production environment.","Once an application is ready for deployment, it's moved to a production environment.",[1620],"production",{"id":1622,"data":1623,"type":24,"maxContentLevel":37,"version":24,"reviews":1627},"2ec9f2f8-e24a-46cf-9f89-9631ea0437a2",{"type":24,"title":1624,"contentRole":27,"markdownContent":1625,"audioMediaId":1626},"Container deployment","Deployment doesn't always go smoothly. Often, an application will work perfectly in a developer’s unique development environment, but when they package it all up, and deploy it somewhere else, it suddenly breaks.\n\nIn simple terms, the same application can behave slightly differently in two different environments. Fortunately, there is a solution: container deployment.\n\nWith container deployment, developers package an application and all its dependencies into a single package known as a container. The container itself is a stable environment which safely shelters the application, and makes sure it isn't affected by changes between the development environment and the prod.","7b7ceea3-e2bd-4f2d-af2b-4f76c9da51b9",[1628],{"id":1629,"data":1630,"type":60,"version":24,"maxContentLevel":37},"b7364d63-6609-4c14-879b-1648459d077d",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1631,"multiChoiceCorrect":1633,"multiChoiceIncorrect":1634},[1632],"What is it called when developers bundle an application and all its dependencies into a single package?",[1624],[1635,1636,1637],"Bundle deployment","Parcel deployment","Package deployment",{"id":1639,"data":1640,"type":24,"maxContentLevel":37,"version":24,"reviews":1644},"0fc71a40-ab5e-459a-a7b4-786548829f00",{"type":24,"title":1641,"contentRole":27,"markdownContent":1642,"audioMediaId":1643},"Local deployment","In backend development, you can either deploy locally or remotely.\n\nLocal deployment is the process of setting up a backend application on a local machine or server. This method is often used for testing purposes before the application is deployed to a live server. Basically, it's another step between sandbox and prod.\n\nLocal deployment allows developers to identify and fix issues before the application is made available to the public. For instance, if a developer redesigns the user interface, they could deploy that change locally first to make sure all the buttons did what they were supposed to.","9a52c1b3-f3cb-4dbd-becb-225b0de84aed",[1645],{"id":1646,"data":1647,"type":60,"version":24,"maxContentLevel":37},"7a726a98-5c07-4a93-b2bd-a88075da20ac",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":1648,"activeRecallAnswers":1652},[1649,1650,1651],"What is it called when a backend application is deployed on a local machine for testing purposes, before deploying it to an actual server?","What is the procedure called when a backend application is tested on a local machine prior to being deployed on an actual server?","What is the name of the method where a backend application is first established on a local machine for testing, before it is transferred to a real server?",[1641],{"id":1654,"data":1655,"type":24,"maxContentLevel":37,"version":24,"reviews":1659},"3cc81631-1a59-471c-8eea-3e1b57f92647",{"type":24,"title":1656,"contentRole":27,"markdownContent":1657,"audioMediaId":1658},"Remote deployment","Remote, or cloud-based, deployment involves hosting backend applications on a cloud server, such as Amazon Web Services or Google Cloud. This method of deployment is more scalable, flexible, and can be more cost effective because instead of needing to decide on all your storage and server costs up front, you can rent space from a cloud server that scales up and down to meet changing user demand.\n\nAs the user base grows, more resources can be allocated to handle the increased load. Conversely, during periods of low usage, resources can be scaled back to save costs.\n\nCloud-based deployment also provides benefits such as automatic updates and disaster recovery options. Automatic updates ensure that the application is always running the latest version, while disaster recovery options provide a safety net in case of data loss or server failure.","1fb2f57b-04e2-4962-92d7-a808538d764f",[1660,1668],{"id":1661,"data":1662,"type":60,"version":24,"maxContentLevel":37},"94a93dce-99ef-4910-a1e1-f0660fb595b8",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":1663,"activeRecallAnswers":1666},[1664,1665],"Why are cloud-based servers more cost effective than local servers?","What makes cloud-based servers a more economical choice compared to local servers?",[1667],"You can rent space that scales up and down to meet changing user demand.",{"id":1669,"data":1670,"type":60,"version":24,"maxContentLevel":37},"e73a774b-7224-4a15-8d9f-06dd979022a7",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1671,"multiChoiceCorrect":1673,"multiChoiceIncorrect":1675},[1672],"Amazon Web Services and Google Cloud are examples of:",[1674],"Cloud servers",[1676,1677,1678],"Local servers","Dedicated servers","Virtual private servers",{"id":1680,"data":1681,"type":27,"version":24,"maxContentLevel":37,"pages":1683},"98fc895a-1e80-40a2-b9a9-7ea9e7f6b156",{"type":27,"title":1682},"Deployment Testing and Troubleshooting",[1684,1709,1725,1742],{"id":1685,"data":1686,"type":24,"maxContentLevel":37,"version":24,"reviews":1689},"85e29b55-5610-42ec-9bae-764433ba48cd",{"type":24,"title":1341,"contentRole":27,"markdownContent":1687,"audioMediaId":1688},"Load testing and stress testing are common methods used to test the performance and stability of a deployed application.\n\nLoad testing involves simulating a high volume of concurrent users or requests in order to assess the application's ability to handle heavy traffic. This helps to ensure that the application can handle peak usage periods without performance degradation, providing a smooth and responsive user experience.\n\nStress testing, on the other hand, involves pushing the application beyond its normal limits to identify any potential weaknesses or points of failure.","e095f445-2e41-483b-88c6-9e02177bb2a9",[1690,1698],{"id":1691,"data":1692,"type":60,"version":24,"maxContentLevel":37},"26609401-7464-44f5-b3a6-4251d0cc309f",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":1693,"clozeWords":1696},[1694,1695],"Stress testing involves pushing an application beyond its normal limits.","Stress testing involves pushing an application past its typical limits.",[1697],"Stress",{"id":1699,"data":1700,"type":60,"version":24,"maxContentLevel":37},"cd9cce1b-f420-4b22-afd7-e5d396eca1da",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1701,"multiChoiceCorrect":1703,"multiChoiceIncorrect":1705},[1702],"What is load testing used to assess?",[1704],"How an app handles heavy traffic",[1706,1707,1708],"How an app handles SQL injections","How an app handles cold weather","How an app handles badly written code",{"id":1710,"data":1711,"type":24,"maxContentLevel":37,"version":24,"reviews":1715},"96cd352a-61f9-452e-9e8e-577f8ed586a4",{"type":24,"title":1712,"contentRole":27,"markdownContent":1713,"audioMediaId":1714},"Troubleshooting","Even with container deployment, things can still go wrong.\n\nOne of the most common deployment issues is server configuration errors. For example, a developer may mistakenly provide the wrong database hostname in the configuration file. Instead of \"db.example.com,\" they accidentally write \"db.example.cmo\", and the entire application fails.\n\nTo figure out what went wrong in the deployment, developers can check the application logs which contain a record of events and activities during the application's runtime. They can also verify server configurations by confirming that database connection details, API endpoints, security settings, and other configurations are accurate.","fe8e1135-ee15-424d-aead-f3645bb67777",[1716],{"id":1717,"data":1718,"type":60,"version":24,"maxContentLevel":37},"fe781382-b5b7-4f86-b876-de02c719f8b5",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":1719,"activeRecallAnswers":1722},[1720,1721],"What are two good steps that a developer should take when trying to work out what went wrong during deployment?","When a deployment goes wrong, what are two steps a developer can take to help identify the problem?",[1723,1724],"Check application logs","Verify server configurations",{"id":1726,"data":1727,"type":24,"maxContentLevel":37,"version":24,"reviews":1730},"3f1084fb-8a9a-47d9-bb53-cab9c3fe34b3",{"type":24,"title":908,"contentRole":27,"markdownContent":1728,"audioMediaId":1729},"Automating the deployment process is a good best practice to adopt. In an automated deployment, the process of packaging the application and configuring the server settings can all be scripted and controlled by deployment tools, making typos and misconfigurations less likely.\n\nVersion control is also critical as it lets developers maintain a history of code changes, including additions, modifications, and deletions. That way, if a deployment introduces unexpected issues or errors, version control makes it possible to revert to a previous known-good version.\n\nMonitoring the application's server performance is also important. If the server's response times increase unexpectedly, it could indicate an issue with deployment.","1274e5f7-92fc-473b-bb34-7c3c13764576",[1731],{"id":1732,"data":1733,"type":60,"version":24,"maxContentLevel":37},"c3711f9f-f055-40c4-9f58-14d7edd03cf3",{"type":60,"reviewType":27,"spacingBehaviour":24,"binaryQuestion":1734,"binaryCorrect":1738,"binaryIncorrect":1740},[1735,1736,1737],"Which of these could indicate an issue with deployment?","What could be a potential sign of a problem with the deployment process?","What could be a sign of deployment-related issues?",[1739],"A sudden increase in server response times",[1741],"A sudden decrease in server response times",{"id":1743,"data":1744,"type":24,"maxContentLevel":37,"version":24,"reviews":1748},"f3644a39-04a8-4f3b-8339-d40e1ecfba8c",{"type":24,"title":1745,"contentRole":27,"markdownContent":1746,"audioMediaId":1747},"Maintenance","After deploying an application, Backened Developers will need to continue maintaining it.\n\nRegular updates ensure that the application remains secure, up-to-date, and capable of meeting user needs. These updates might include incorporating security patches, bug fixes, and new features into the application. For example, when a security vulnerability is discovered in one of the software libraries used by the application, the Backend Developer must promptly update the library.\n\nMaintenance tasks may also include managing user access. Imagine a developer leaves a company. That user should no longer have access to any systems. During routine maintenance, Backend Developers can double check that any old employees have been properly removed from the system.","f548d830-f540-4f62-8018-fab7ff24b43c",[1749],{"id":1750,"data":1751,"type":60,"version":24,"maxContentLevel":37},"13ec3245-fa64-4c22-8cbf-14c7a7eb8b69",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1752,"multiChoiceCorrect":1754,"multiChoiceIncorrect":1756},[1753],"Who is responsible for maintaining an application after its deployment?",[1755],"Backened Developers",[1757,1758,1759],"Frontend Developers","Database Administrators","System Analysts",{"id":1761,"data":1762,"type":29,"maxContentLevel":37,"version":24,"orbs":1765},"a00ea0b5-ff60-4ff3-90f1-4511c3a97a3c",{"type":29,"title":1763,"tagline":1764},"Getting a job","How to become a Backend Developer",[1766,1822],{"id":1767,"data":1768,"type":27,"version":24,"maxContentLevel":37,"pages":1770},"c44989d5-6ffc-419b-814f-491d07318faf",{"type":27,"title":1769},"Becoming a Backend Developer",[1771,1789,1806],{"id":1772,"data":1773,"type":24,"maxContentLevel":37,"version":24,"reviews":1777},"c908b65a-55b9-453a-928c-6e1336992fe6",{"type":24,"title":1774,"contentRole":27,"markdownContent":1775,"audioMediaId":1776},"Can you become a Backend Developer?","Backend development is booming. In 2021, the role topped HackerEarth’s list of most in-demand roles to fill in a survey answered by HR managers and engineering managers. There are far more job openings than computer science graduates who could step into those roles.\n\nThis imbalance between supply and demand presents a unique opportunity for those interested in pursuing a career in this field – and you don’t necessarily need a diploma to get a job. Bootcamp graduates or even self-taught developers can find themselves employed in the field.\n\nTo secure a job as a Backend Developer, you’ll need proficiency in programming, experience with databases, and a solid understanding of API development. Additionally, a keen awareness of security is beneficial, as Backend Developers often deal with sensitive data.","f7bda489-c593-47d1-bb76-a42b3afa0324",[1778],{"id":1779,"data":1780,"type":60,"version":24,"maxContentLevel":37},"5d23e296-67f4-4933-aee8-7c91e993680d",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1781,"multiChoiceCorrect":1783,"multiChoiceIncorrect":1785},[1782],"In 2021, where did 'Backend Developer' come in HackerEarth’s survey of most in-demand roles?",[1784],"1st",[1786,1787,1788],"2nd","3rd","4th",{"id":1790,"data":1791,"type":24,"maxContentLevel":37,"version":24,"reviews":1795},"4ae870c6-6f1a-4658-86fb-11bfb9c85aed",{"type":24,"title":1792,"contentRole":27,"markdownContent":1793,"audioMediaId":1794},"Salary","The salary of a Backend Developer varies significantly based on the developer's level of experience, geographical location, and proficiency in specific technologies. As such, it is difficult to provide a definitive figure for a Backend Developer's salary.\n\nAccording to data from Glassdoor, the average salary for a Backend Developer in the United States is approximately $100,000 per year. This figure provides a general indication of the earning potential in this field. Compare that to average salaries like those of Frontend Developers ($85,000 annually) or Data Analysts ($70,000 annually) and you’ll see how popular Backend Developers are.\n\nIn Europe, Backend Developers are typically paid lower – closer to $60k to $80k annually – but that’s still a very good salary.","d4115a05-9933-4056-96c1-5e8f6a232d75",[1796],{"id":1797,"data":1798,"type":60,"version":24,"maxContentLevel":37},"5d8f9e8b-a641-4ee5-a7b9-d667464664fa",{"type":60,"reviewType":37,"spacingBehaviour":24,"multiChoiceQuestion":1799,"multiChoiceCorrect":1802,"multiChoiceIncorrect":1803},[1800,1801],"In the United States, which of these roles has the highest average salary?","In the USA, which role commands the highest average salary?",[97],[1757,1804,1805],"Data Analysts","Data Scientists",{"id":1807,"data":1808,"type":24,"maxContentLevel":37,"version":24,"reviews":1812},"ec00346d-f8b7-4ef0-b1e5-36fc2deb4616",{"type":24,"title":1809,"contentRole":27,"markdownContent":1810,"audioMediaId":1811},"Degrees","For someone seeking a backend job, degrees and certifications can prove that you've got what it takes. They are basically a piece of paper where a trusted authority has said, “Hey, this person can really do what they say they can.”\n\n ![Graph](image://020224d0-0553-4da3-bac4-d78bc10dc5ee \"Certificates. Image: Thirdman via Pexels (https://www.pexels.com/photo/teacher-teaching-online-6503000/)\")\n\nThese certifications don't need to come from universities. Certifications from recognized institutions or platforms, such as Oracle Certified Professional or Java SE Programmer, can also provide a competitive edge in the job market. Even ones from less-recognized sources can help to back up your skills.\n\nOf course, some companies value practical experience and demonstrated skills over formal education. But given the lack of qualified candidates, certificates can do a lot of good.","adb08f3f-aa03-4286-a748-40fca4ad3c20",[1813],{"id":1814,"data":1815,"type":60,"version":24,"maxContentLevel":37},"debc16e8-58f1-43f4-b0e3-23270acf63e3",{"type":60,"reviewType":24,"spacingBehaviour":24,"activeRecallQuestion":1816,"activeRecallAnswers":1819},[1817,1818],"What are two examples of recognized platforms that can provide a developer with useful certifications?","Which two platforms are known for providing recognized certifications for developers?",[1820,1821],"Oracle Certified Professional","Java SE Programmer",{"id":1823,"data":1824,"type":27,"version":24,"maxContentLevel":37,"pages":1826},"d9f504a9-55b3-4151-a888-448fc7ce7dfa",{"type":27,"title":1825},"Building a Strong Profile",[1827,1843,1858,1864],{"id":1828,"data":1829,"type":24,"maxContentLevel":37,"version":24,"reviews":1833},"9ae13af0-db04-4b5e-aa1d-311b35fd9e21",{"type":24,"title":1830,"contentRole":27,"markdownContent":1831,"audioMediaId":1832},"Portfolios","For people without extensive degrees, portfolio projects can serve as a useful tool to demonstrate skills to potential employers. These projects provide tangible evidence of your ability to apply theoretical knowledge in practical scenarios, even without a job or degree.\n\nA well-structured portfolio of projects should ideally showcase your proficiency in programming languages such as Python, Java, or Ruby. Portfolio projects often include examples of database management, server scripting, and API integration. These can be presented either as live example systems, or as repositories on public platforms like Github, that let other people view the code you’ve written.\n\nA good portfolio project is creating a library: that's a collection of reusable code that others can use to build their own systems. These types of projects allow you to demonstrate the utility of the code that you write when other developers use the library you have written in their own projects. This is often demonstrated through the number of downloads of a project, or stars that a project receives on Github, which demonstrate people’s interest.","36a31085-4704-4e35-b1cb-54f0d885d5cd",[1834],{"id":1835,"data":1836,"type":60,"version":24,"maxContentLevel":37},"f2c67ab2-6d50-4e2e-89e6-284bbae3987e",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":1837,"clozeWords":1841},[1838,1839,1840],"A Backend Developer can impress an employer by creating a library: a collection of reusable code that others can use.","By creating a library of reusable code, a Backend Developer can impress a potential employer.","A Backend Developer can make a strong impression on an employer by developing a library of reusable code.",[1842],"library",{"id":1844,"data":1845,"type":24,"maxContentLevel":37,"version":24,"reviews":1849},"b222cc99-6aa5-406f-bbc5-2358b21eb9d4",{"type":24,"title":1846,"contentRole":27,"markdownContent":1847,"audioMediaId":1848},"Networking","While technical skills are non-negotiable, networking can also be a useful skill when seeking a job in this industry.\n\nNetworking can be anything from attending industry events to joining online communities or just connecting with professionals on LinkedIn. These activities can help you stay informed about the latest industry trends, learn from experienced professionals, and discover job opportunities that may not be publicly advertised. Did you know that according to CNBC, over 70% of jobs are never publicly listed?\n\nEven if they don’t land you a job, cultivating these relationships is still valuable. Other developers can provide support throughout your career, including professional advice and mentorship.","a7055dd4-d732-4ee8-a485-7dda04b7968d",[1850],{"id":1851,"data":1852,"type":60,"version":24,"maxContentLevel":37},"d89b34d1-e4b4-41e7-b116-129cd196c030",{"type":60,"reviewType":30,"spacingBehaviour":24,"clozeQuestion":1853,"clozeWords":1856},[1854,1855],"Networking is important for Backend Developers, because over 70% of jobs are never publicly listed.","Over 70% of jobs aren't publicly listed, making networking crucial for Backend Developers.",[1857],"70",{"id":1859,"data":1860,"type":24,"maxContentLevel":37,"version":24},"a6bacf72-8158-4aff-9b07-4291f39c79a5",{"type":24,"title":1861,"contentRole":27,"markdownContent":1862,"audioMediaId":1863},"Job applications","Because so many employers are flooded with low-quality applications, many use automation to scan resumes for keywords. This is why it's important to tailor your resume to match the job posting. For instance, if the job description mentions cloud deployment, ensure your proficiency in this area is clearly highlighted on your resume.\n\nAs well as this, if you have established a connection with the company or recruiter through your networking efforts, don't hesitate to leverage these relationships. A personal recommendation or introduction can boost your odds of getting the interview. And don't forget to submit that portfolio with examples of previous work.\n\nIn other words: first, you say you can do the thing. Second, someone else says you can do the thing. Finally, you show that you can do the thing.","cb3a7fe5-f283-4b01-9cd6-6b4212182c96",{"id":1865,"data":1866,"type":24,"maxContentLevel":37,"version":24},"743f5e10-f586-4b7f-bd4c-90515e6cb549",{"type":24,"title":1867,"contentRole":27,"markdownContent":1868,"audioMediaId":1869},"Interviews","As with any interview, it's important to review common interview questions and practice your responses. This can help you to make a better first impression, because you’ll be less likely to fumble or get nervous.\n\nInterviews for Backend Developer positions may also involve coding challenges or problem-solving tasks. These tests assess your ability to apply your technical knowledge in a practical scenario. Luckily, many platforms compile these questions, so it’s not hard to practice a sample of these tasks before attending the actual interview.\n\n ![Graph](image://9fc15299-de02-4bbc-b825-20e5474350a2 \"Job interview. Image: Tima Miroshnichenko via Pexels (https://www.pexels.com/photo/woman-having-a-job-interview-5439141/)\")\n\nUltimately, if you've put the time and effort in, employers will usually be able to see that you have what it takes. And remember – by choosing to take this pathway, that time and effort has already started. Now, it's time to take a coding course, or try your hand at a project. The wider world of backend development awaits.","be83f6fb-f8c4-462c-9162-c11ff528437f",{"left":4,"top":4,"width":1871,"height":1871,"rotate":4,"vFlip":6,"hFlip":6,"body":1872},24,"\u003Cpath fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"m9 18l6-6l-6-6\"/>",{"left":4,"top":4,"width":1871,"height":1871,"rotate":4,"vFlip":6,"hFlip":6,"body":1874},"\u003Cg fill=\"none\" stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\">\u003Cpath d=\"M12.586 2.586A2 2 0 0 0 11.172 2H4a2 2 0 0 0-2 2v7.172a2 2 0 0 0 .586 1.414l8.704 8.704a2.426 2.426 0 0 0 3.42 0l6.58-6.58a2.426 2.426 0 0 0 0-3.42z\"/>\u003Ccircle cx=\"7.5\" cy=\"7.5\" r=\".5\" fill=\"currentColor\"/>\u003C/g>",1778179485700]