[{"data":1,"prerenderedAt":600},["ShallowReactive",2],{"navigation":3,"\u002Fblog\u002Fprocesses-for-better-software-volume-3":286,"\u002Fblog\u002Fprocesses-for-better-software-volume-3-surround":593},[4],{"title":5,"path":6,"stem":7,"children":8,"page":285},"Blog","\u002Fblog","blog",[9,13,17,21,25,29,33,37,41,45,49,53,57,61,65,69,73,77,81,85,89,93,97,101,105,109,113,117,121,125,129,133,137,141,145,149,153,157,161,165,169,173,177,181,185,189,193,197,201,205,209,213,217,221,225,229,233,237,241,245,249,253,257,261,265,269,273,277,281],{"title":10,"path":11,"stem":12},"2020 - The best Javascript Frameworks","\u002Fblog\u002F2020-the-best-javascript-frameworks","blog\u002F2020 - The best Javascript Frameworks",{"title":14,"path":15,"stem":16},"5 Essential Reasons for E2E Testing","\u002Fblog\u002F5-essential-reasons-for-e2e-testing","blog\u002F5 Essential Reasons for E2E Testing",{"title":18,"path":19,"stem":20},"5 Mistakes Front-end Developers should Avoid","\u002Fblog\u002F5-mistakes-front-end-developers-should-avoid","blog\u002F5 Mistakes Front-end Developers should Avoid",{"title":22,"path":23,"stem":24},"5 Things to motivate you to perform Unit Testing","\u002Fblog\u002F5-things-to-motivate-you-to-perform-unit-testing","blog\u002F5 Things to motivate you to perform Unit Testing",{"title":26,"path":27,"stem":28},"52 Articles, 7 Books and a Pandemic","\u002Fblog\u002F52-articles-7-books-and-a-pandemic","blog\u002F52 Articles, 7 Books and a Pandemic",{"title":30,"path":31,"stem":32},"6 Levels of Autonomous Vehicles","\u002Fblog\u002F6-levels-of-autonomous-vehicles","blog\u002F6 Levels of Autonomous Vehicles",{"title":34,"path":35,"stem":36},"ADAS","\u002Fblog\u002Fadas","blog\u002FADAS",{"title":38,"path":39,"stem":40},"Ambient Intelligence","\u002Fblog\u002Fambient-intelligence","blog\u002FAmbient Intelligence",{"title":42,"path":43,"stem":44},"Best 5 Hybrid Mobile App Development Frameworks","\u002Fblog\u002Fbest-5-hybrid-mobile-app-development-frameworks","blog\u002FBest 5 Hybrid Mobile App Development Frameworks",{"title":46,"path":47,"stem":48},"Best Practices for Code Testing","\u002Fblog\u002Fbest-practices-for-code-testing","blog\u002FBest Practices for Code Testing",{"title":50,"path":51,"stem":52},"Blockchains - How and Why?","\u002Fblog\u002Fblockchains-how-and-why","blog\u002FBlockchains - How and Why",{"title":54,"path":55,"stem":56},"Brain Computer Interfaces","\u002Fblog\u002Fbrain-computer-interfaces","blog\u002FBrain Computer Interfaces",{"title":58,"path":59,"stem":60},"Computational Fluid Dynamics","\u002Fblog\u002Fcomputational-fluid-dynamics","blog\u002FComputational Fluid Dynamics",{"title":62,"path":63,"stem":64},"Computer Vision","\u002Fblog\u002Fcomputer-vision","blog\u002FComputer Vision",{"title":66,"path":67,"stem":68},"Cryptography","\u002Fblog\u002Fcryptography","blog\u002FCryptography",{"title":70,"path":71,"stem":72},"Cyber-Physical Systems: Where Digital Meets Reality","\u002Fblog\u002Fcyber-physical-systems","blog\u002FCyber-Physical Systems",{"title":74,"path":75,"stem":76},"Design Patterns - Why and How?","\u002Fblog\u002Fdesign-patterns-why-and-how","blog\u002FDesign Patterns - Why and How",{"title":78,"path":79,"stem":80},"Edge AI: Revolutionizing Intelligence at the Edge","\u002Fblog\u002Fedge-ai","blog\u002FEdge AI",{"title":82,"path":83,"stem":84},"Edge Computing","\u002Fblog\u002Fedge-computing","blog\u002FEdge Computing",{"title":86,"path":87,"stem":88},"Embracing Decentralized Development","\u002Fblog\u002Fembracing-decentralized-development","blog\u002FEmbracing Decentralized Development",{"title":90,"path":91,"stem":92},"Extended Reality Simplified","\u002Fblog\u002Fextended-reality-simplified","blog\u002FExtended Reality Simplified",{"title":94,"path":95,"stem":96},"Good practices for Git","\u002Fblog\u002Fgood-practices-for-git","blog\u002FGood practices for Git",{"title":98,"path":99,"stem":100},"How do browsers work","\u002Fblog\u002Fhow-do-browsers-work","blog\u002FHow do browsers work",{"title":102,"path":103,"stem":104},"How to be a Full Stack Engineer","\u002Fblog\u002Fhow-to-be-a-full-stack-engineer","blog\u002FHow to be a Full Stack Engineer",{"title":106,"path":107,"stem":108},"How to be an effective Engineer?","\u002Fblog\u002Fhow-to-be-an-effective-engineer","blog\u002FHow to be an effective Engineer",{"title":110,"path":111,"stem":112},"How to choose components for a desktop PC on your own","\u002Fblog\u002Fhow-to-choose-components-for-a-desktop-pc-on-your-own","blog\u002FHow to choose components for a desktop PC on your own",{"title":114,"path":115,"stem":116},"Industry 4.0","\u002Fblog\u002Findustry-4","blog\u002FIndustry 4",{"title":118,"path":119,"stem":120},"Industry 4.0 & Mixed Reality","\u002Fblog\u002Findustry-4-and-mixed-reality","blog\u002FIndustry 4 & Mixed Reality",{"title":122,"path":123,"stem":124},"Internet of Behaviours","\u002Fblog\u002Finternet-of-behaviours","blog\u002FInternet of Behaviours",{"title":126,"path":127,"stem":128},"Internet of Things","\u002Fblog\u002Finternet-of-things","blog\u002FInternet of Things",{"title":130,"path":131,"stem":132},"Let's talk about SOLID Principles","\u002Fblog\u002Flets-talk-about-solid-principles","blog\u002FLets talk about SOLID Principles",{"title":134,"path":135,"stem":136},"LiDAR","\u002Fblog\u002Flidar","blog\u002FLiDAR",{"title":138,"path":139,"stem":140},"Machine Vision -Transforming Industries AI","\u002Fblog\u002Fmachine-vision-transforming-industries-ai","blog\u002FMachine Vision -Transforming Industries AI",{"title":142,"path":143,"stem":144},"Mathematics in Software Engineering","\u002Fblog\u002Fmathematics-in-software-engineering","blog\u002FMathematics in Software Engineering",{"title":146,"path":147,"stem":148},"Micro Frontends - A Modern Approach to Front-End Development","\u002Fblog\u002Fmicro-frontends-a-modern-approach-to-front-end-development","blog\u002FMicro Frontends - A Modern Approach to Front-End Development",{"title":150,"path":151,"stem":152},"Natural Language Processing","\u002Fblog\u002Fnatural-language-processing","blog\u002FNatural Language Processing",{"title":154,"path":155,"stem":156},"Optimizing for Search Engines","\u002Fblog\u002Foptimizing-for-search-engines","blog\u002FOptimizing for Search Engines",{"title":158,"path":159,"stem":160},"Physics Engine","\u002Fblog\u002Fphysics-engine","blog\u002FPhysics Engine",{"title":162,"path":163,"stem":164},"Point cloud","\u002Fblog\u002Fpoint-cloud","blog\u002FPoint cloud",{"title":166,"path":167,"stem":168},"Processes for Better Software Volume 1","\u002Fblog\u002Fprocesses-for-better-software-volume-1","blog\u002FProcesses for Better Software Volume 1",{"title":170,"path":171,"stem":172},"Processes for Better Software Volume 2","\u002Fblog\u002Fprocesses-for-better-software-volume-2","blog\u002FProcesses for Better Software Volume 2",{"title":174,"path":175,"stem":176},"Processes for Better Software Volume 3","\u002Fblog\u002Fprocesses-for-better-software-volume-3","blog\u002FProcesses for Better Software Volume 3",{"title":178,"path":179,"stem":180},"Quantum Computers","\u002Fblog\u002Fquantum-computers","blog\u002FQuantum Computers",{"title":182,"path":183,"stem":184},"Quantum Computing and its Potential Impact on Software Development","\u002Fblog\u002Fquantum-computing-and-its-potential-impact-on-software-development","blog\u002FQuantum Computing and its Potential Impact on Software Development",{"title":186,"path":187,"stem":188},"Quantum Cryptography","\u002Fblog\u002Fquantum-cryptography","blog\u002FQuantum Cryptography",{"title":190,"path":191,"stem":192},"Ray tracing - What you need to know","\u002Fblog\u002Fray-tracing-what-you-need-to-know","blog\u002FRay tracing - What you need to know",{"title":194,"path":195,"stem":196},"Reflections on how we code","\u002Fblog\u002Freflections-on-how-we-code","blog\u002FReflections on how we code",{"title":198,"path":199,"stem":200},"Robotic Process Automation","\u002Fblog\u002Frobotic-process-automation","blog\u002FRobotic Process Automation",{"title":202,"path":203,"stem":204},"Self Driving Cars - A Better Tomorrow","\u002Fblog\u002Fself-driving-cars-a-better-tomorrow","blog\u002FSelf Driving Cars - A Better Tomorrow",{"title":206,"path":207,"stem":208},"Semantic Web - A Smarter Future","\u002Fblog\u002Fsemantic-web-a-smarter-future","blog\u002FSemantic Web A Smarter Future",{"title":210,"path":211,"stem":212},"Sensor Fusion","\u002Fblog\u002Fsensor-fusion","blog\u002FSensor Fusion",{"title":214,"path":215,"stem":216},"Serverless Computing and the Future","\u002Fblog\u002Fserverless-computing-and-the-future","blog\u002FServerless Computing and the Future",{"title":218,"path":219,"stem":220},"Shaders","\u002Fblog\u002Fshaders","blog\u002FShaders",{"title":222,"path":223,"stem":224},"Smart Home Automation","\u002Fblog\u002Fsmart-home-automation","blog\u002FSmart Home Automation",{"title":226,"path":227,"stem":228},"The Horizon of Cybersecurity","\u002Fblog\u002Fthe-horizon-of-cybersecurity","blog\u002FThe Horizon of Cybersecurity",{"title":230,"path":231,"stem":232},"The Perils of Ray-Tracing","\u002Fblog\u002Fthe-perils-of-ray-tracing","blog\u002FThe Perils of Ray-Tracing",{"title":234,"path":235,"stem":236},"The Psychology of Software Bugs Understanding and Preventing Common Mistakes","\u002Fblog\u002Fthe-psychology-of-software-bugs-understanding-and-preventing-common-mistakes","blog\u002FThe Psychology of Software Bugs - Understanding and Preventing Common Mistakes",{"title":238,"path":239,"stem":240},"Top 5 Advantages of MongoDB","\u002Fblog\u002Ftop-5-advantages-of-mongodb","blog\u002FTop 5 Advantages of MongoDB",{"title":242,"path":243,"stem":244},"Top Trends in Augmented Reality","\u002Fblog\u002Ftop-trends-in-augmented-reality","blog\u002FTop Trends in Augmented Reality",{"title":246,"path":247,"stem":248},"Top features of Unreal Engine","\u002Fblog\u002Ftop-features-of-unreal-engine","blog\u002FTop features of Unreal Engine",{"title":250,"path":251,"stem":252},"Unity 3D - Why to go with it?","\u002Fblog\u002Funity-3d-why-to-go-with-it","blog\u002FUnity 3D - Why to go with it",{"title":254,"path":255,"stem":256},"Virtual Reality Advantages","\u002Fblog\u002Fvirtual-reality-advantages","blog\u002FVirtual Reality Advantages",{"title":258,"path":259,"stem":260},"Virtual Test Drive & Autonomous Driving","\u002Fblog\u002Fvirtual-test-drive-and-autonomous-driving","blog\u002FVirtual Test Drive & Autonomous Driving",{"title":262,"path":263,"stem":264},"WebAssembly and Progressive Web Apps","\u002Fblog\u002Fwebassembly-and-progressive-web-apps","blog\u002FWebAssembly and Progressive Web Apps",{"title":266,"path":267,"stem":268},"What are Best Practices?","\u002Fblog\u002Fwhat-are-best-practices","blog\u002FWhat are Best Practices",{"title":270,"path":271,"stem":272},"What are Digital Twins?","\u002Fblog\u002Fwhat-are-digital-twins","blog\u002FWhat are Digital Twins",{"title":274,"path":275,"stem":276},"What makes Mixed Reality the next big thing?","\u002Fblog\u002Fwhat-makes-mixed-reality-the-next-big-thing","blog\u002FWhat makes Mixed Reality the next big thing",{"title":278,"path":279,"stem":280},"Why Game Engines?","\u002Fblog\u002Fwhy-game-engines","blog\u002FWhy Game Engines",{"title":282,"path":283,"stem":284},"Why we need User Experience Design?","\u002Fblog\u002Fwhy-we-need-user-experience-design","blog\u002FWhy we need User Experience Design",false,{"id":287,"title":174,"author":288,"body":292,"date":585,"description":586,"extension":587,"image":588,"meta":589,"minRead":402,"navigation":590,"path":175,"seo":591,"stem":176,"__hash__":592},"blog\u002Fblog\u002FProcesses for Better Software Volume 3.md",{"name":289,"avatar":290},"Aghil Jose",{"src":291,"alt":289},"\u002Fassets\u002Fimages\u002Fabout.jpg",{"type":293,"value":294,"toc":578},"minimark",[295,299,304,307,311,314,317,433,436,477,481,484,488,491,561,564,568,571,574],[296,297,298],"p",{},"There are many ways to write code to do something. But only when we do follow\ncertain ways, does the code remains maintainable and thus usable for a long\ntime to come.",[300,301,303],"h2",{"id":302},"_1-limit-methodfunction-arguments","1. Limit method\u002Ffunction arguments.",[296,305,306],{},"It is always a better practice to limit our arguments\u002Fparameters to 3 or less.\nThis improves the readability and in extension, maintainability. If it is\ncrossing a number, then it is time to refactor the code. As an example, if we\ncan accommodate multiple arguments into an object, in a meaningful way, then\nwe can effectively decrease the number of arguments passed, while still\nretaining the same result.",[300,308,310],{"id":309},"_2-simplify-conditional-expressions","2. Simplify conditional expressions.",[296,312,313],{},"We all need to use conditional expressions in our codes. The trick is\nsimplifying it in a way that it remains readable. The following two methods\ntakes in same argument and gives same output, only the function on the second\none does it in a much simpler way.",[296,315,316],{},"Method 1:",[318,319,324],"pre",{"className":320,"code":321,"language":322,"meta":323,"style":323},"language-js shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","function isPersonAdult(person) {\n  if (person.age >= 18) {\n    return true;\n  } else {\n    return false;\n  }\n}\n","js","",[325,326,327,354,387,400,411,421,427],"code",{"__ignoreMap":323},[328,329,332,336,340,344,348,351],"span",{"class":330,"line":331},"line",1,[328,333,335],{"class":334},"spNyl","function",[328,337,339],{"class":338},"s2Zo4"," isPersonAdult",[328,341,343],{"class":342},"sMK4o","(",[328,345,347],{"class":346},"sHdIc","person",[328,349,350],{"class":342},")",[328,352,353],{"class":342}," {\n",[328,355,357,361,365,368,371,374,377,381,384],{"class":330,"line":356},2,[328,358,360],{"class":359},"s7zQu","  if",[328,362,364],{"class":363},"swJcz"," (",[328,366,347],{"class":367},"sTEyZ",[328,369,370],{"class":342},".",[328,372,373],{"class":367},"age",[328,375,376],{"class":342}," >=",[328,378,380],{"class":379},"sbssI"," 18",[328,382,383],{"class":363},") ",[328,385,386],{"class":342},"{\n",[328,388,390,393,397],{"class":330,"line":389},3,[328,391,392],{"class":359},"    return",[328,394,396],{"class":395},"sfNiH"," true",[328,398,399],{"class":342},";\n",[328,401,403,406,409],{"class":330,"line":402},4,[328,404,405],{"class":342},"  }",[328,407,408],{"class":359}," else",[328,410,353],{"class":342},[328,412,414,416,419],{"class":330,"line":413},5,[328,415,392],{"class":359},[328,417,418],{"class":395}," false",[328,420,399],{"class":342},[328,422,424],{"class":330,"line":423},6,[328,425,426],{"class":342},"  }\n",[328,428,430],{"class":330,"line":429},7,[328,431,432],{"class":342},"}\n",[296,434,435],{},"Method 2:",[318,437,439],{"className":320,"code":438,"language":322,"meta":323,"style":323},"function isPersonAdult(person) {\n  return person.age >= 18;\n}\n",[325,440,441,455,473],{"__ignoreMap":323},[328,442,443,445,447,449,451,453],{"class":330,"line":331},[328,444,335],{"class":334},[328,446,339],{"class":338},[328,448,343],{"class":342},[328,450,347],{"class":346},[328,452,350],{"class":342},[328,454,353],{"class":342},[328,456,457,460,463,465,467,469,471],{"class":330,"line":356},[328,458,459],{"class":359},"  return",[328,461,462],{"class":367}," person",[328,464,370],{"class":342},[328,466,373],{"class":367},[328,468,376],{"class":342},[328,470,380],{"class":379},[328,472,399],{"class":342},[328,474,475],{"class":330,"line":389},[328,476,432],{"class":342},[300,478,480],{"id":479},"_3-declare-variables-near-to-their-usage","3. Declare variables near to their usage.",[296,482,483],{},"Some of us (including myself), usually have a tendency to declare all the\nvariables at one place. Usually at the top. Even if the variables are\nfollowing good naming conventions such that one look will give you the idea\nwhat it is used for, it is still a better way and a good practice to declare\nit near to where it is being used. One adverse effect of declaring all\nvariables in one place is we might scroll up and down a lot while trying to\nunderstand the variable and it is highly likely to get distracted during that\nprocess. We might be in the middle of creating a feature or fixing a bug and\nit is always better to finish the job at hand before jumping into another.",[300,485,487],{"id":486},"_4-avoid-unintended-consequences-in-your-function","4. Avoid unintended consequences in your function.",[296,489,490],{},"If you are creating a function with a name associated with its job, then that\nparticular function should do just that. Nothing more, nothing less. Again, in\nthe long run this makes the code more maintainable. For example,",[318,492,494],{"className":320,"code":493,"language":322,"meta":323,"style":323},"function addNumbers(numberOne, numberTwo) {\n  emailService.send(\"Addition is done.\");\n  return numberOne + numberTwo;\n}\n",[325,495,496,518,543,557],{"__ignoreMap":323},[328,497,498,500,503,505,508,511,514,516],{"class":330,"line":331},[328,499,335],{"class":334},[328,501,502],{"class":338}," addNumbers",[328,504,343],{"class":342},[328,506,507],{"class":346},"numberOne",[328,509,510],{"class":342},",",[328,512,513],{"class":346}," numberTwo",[328,515,350],{"class":342},[328,517,353],{"class":342},[328,519,520,523,525,528,530,533,537,539,541],{"class":330,"line":356},[328,521,522],{"class":367},"  emailService",[328,524,370],{"class":342},[328,526,527],{"class":338},"send",[328,529,343],{"class":363},[328,531,532],{"class":342},"\"",[328,534,536],{"class":535},"sfazB","Addition is done.",[328,538,532],{"class":342},[328,540,350],{"class":363},[328,542,399],{"class":342},[328,544,545,547,550,553,555],{"class":330,"line":389},[328,546,459],{"class":359},[328,548,549],{"class":367}," numberOne",[328,551,552],{"class":342}," +",[328,554,513],{"class":367},[328,556,399],{"class":342},[328,558,559],{"class":330,"line":402},[328,560,432],{"class":342},[296,562,563],{},"Usually, there is no need for the line “emailService.send(“Addition is\ndone.”);” inside this function. Either change the name of the function\naccordingly or just remove the line to make a more sensible, readable and\nmaintainable function.",[300,565,567],{"id":566},"_5-avoid-zombie-code","5. Avoid zombie code.",[296,569,570],{},"This is simply dead code but with a chance to come alive. In layman’s terms,\nzombie code is usually commented code, kept by engineers, who cannot decide\nwhether it should be deleted or not because there might be a slight chance\nthat they might have to use it at some point in the future. This again will\nmost probably distract any other engineer who comes into maintain the code.\nThey will not be sure whether to keep it not, mainly because they do not know\nwhy it was created in the first place and will spend a lot of time on the\nsame. One thing for sure is we must never put this inside a production code.",[296,572,573],{},"Disclaimer : The views and opinions expressed in the article belong solely to the\nauthor, and not necessarily to the author's employer, organisation, committee\nor other group or individual.",[575,576,577],"style",{},"html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":323,"searchDepth":356,"depth":356,"links":579},[580,581,582,583,584],{"id":302,"depth":356,"text":303},{"id":309,"depth":356,"text":310},{"id":479,"depth":356,"text":480},{"id":486,"depth":356,"text":487},{"id":566,"depth":356,"text":567},"2020-11-01","Best practices for software engineers.","md","\u002Fassets\u002Fimages\u002Fblog\u002F021120\u002Ftitle.jpg",{},true,{"title":174,"description":586},"TCvMeoxwBxGr8i0XK3-nCmtDXsswfu-SnE7bW3Os4fE",[594,597],{"path":131,"title":130,"description":595,"date":596},"A brief explanation of the SOLID design principles by Uncle Bob.","2020-11-08",{"path":271,"title":270,"description":598,"date":599},"A brief introduction to digital twins.","2020-10-25",1790439209401]