{"componentChunkName":"component---src-templates-generic-template-js","path":"/lectures/lecture1-intro","webpackCompilationHash":"041090671d318979d692","result":{"data":{"markdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"h1","properties":{"id":"introduction"},"children":[{"type":"element","tagName":"a","properties":{"href":"#introduction","ariaLabel":"introduction permalink","className":["anchor"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Introduction"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"CS312's main topics:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ol","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Effective processes for managing SW development teams, e.g. Agile"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"SW development best practices and the supporting tools and services, e.g.\nVCS (git and GitHub), CI, ..."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Modern web application technologies, e.g. JavaScript, React, ..."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"What is this class not? Software engineering."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"There is a separate (but related) field that is attempting to make SW\ndevelopment an engineering discipline. Some of the ideas we will use come from\nthat work, but we will not get into the formalisms or the theory that a\nsoftware engineering class would include (e.g. requirements languages). That\nsaid the term \"SW engineer\" is often used a catch-all, not just someone who\npractices those formal methodologies."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"What also is this class not? A JavaScript class. CS312 is not a class about\nJavaScript, it is a class about SW development that uses JavaScript and web\napplications as a vehicle."}]},{"type":"text","value":"\n"},{"type":"comment","value":" \nFirst 18 slides \n"},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{"id":"what-we-ask-of-you"},"children":[{"type":"element","tagName":"a","properties":{"href":"#what-we-ask-of-you","ariaLabel":"what we ask of you permalink","className":["anchor"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"What we ask of you"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"What we ask of you: \"Do the class\". That is commit to the CS312 tools and\nprocesses, even if it seems too process-intensive at times, or even if it\nconflicts with what you have learned or used in other settings, e.g. an\ninternship. I predict that you will find that these processes actually make\nyour teams more productive by enabling everyone to contribute effectively."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"One goal of this course is to practice formal SW development methodologies.\nThat is the process itself is important. And recall that "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"perfect"}]},{"type":"text","value":" practice\nmakes perfect. That is make that extra effort to write a good test (first) or\nmaintain the product backlog (two things we will learn about it). Think of it\nas building your SW development muscle memory. This practice will give you the\nexperience to make informed choices in the future about the best processes,\ntools, and technologies."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"This class has a lot of moving parts (see "},{"type":"element","tagName":"a","properties":{"href":"/~candrews/classes/cs312-f19/resoures/getting-started"},"children":[{"type":"text","value":"\"Getting\nStarted\""}]},{"type":"text","value":"). And we have made a lot of choices for tools,\ntechniques, methodologies. In some cases it is a choice among many similar\nalternatives where there to is no \"right\" answer. That is I don't want you to\nget bogged down in questions of whether any particular tool or technology is\nthe best in a technical or other sense (we often are optimizing for the best\nclass experience, not the best tool). You may be more familiar with the\nalternatives. In keeping with above, we ask you to \"do the class\" with the\nclass tools. Doing so will make your teams more efficient. At the same time, if\nour approach seems to conflict with best practices, don't hesitate to ask us\nabout it - we will both learn from the ensuing discussion."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{"id":"warning-the-only-constant-is-change"},"children":[{"type":"element","tagName":"a","properties":{"href":"#warning-the-only-constant-is-change","ariaLabel":"warning the only constant is change permalink","className":["anchor"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Warning, the only constant is change"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The world will move underneath us. Web technologies are moving at a torrid pace\n(and in some ways problematic pace). The software/library versions we use at\nthe beginning of the semester may be out of date by December. We will try to use\ntechniques to maintain consistent environments, but be mindful of that change.\nAnd be mindful when reading posts on StackOverflow, etc. Check the dates!"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{"id":"a-diversity-of-backgrounds"},"children":[{"type":"element","tagName":"a","properties":{"href":"#a-diversity-of-backgrounds","ariaLabel":"a diversity of backgrounds permalink","className":["anchor"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"A diversity of backgrounds"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"We have a wide variety of backgrounds:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Some of you have learned these technologies in/for another class"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Some of you have used these technologies in an internship or summer research, and"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Some of you have never touched these technologies before..."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"In some of these aspects, CS312 will similar to your future working\nenvironments but more challenging (a company doesn't usually create a team of\ncomposed only of new developers). To overcome these challenges, we expect you\nto:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Be responsible for independently picking up the details of unfamiliar tools\nor technologies. "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Put in the effort to make sure you don't get left behind. Use the resources\non the course page (and others) and make sure to ask me and others for help\nwhen you need it. Don't be the teammate that can't contribute because you\ndon't know what is going on!"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"If you have prior experience, we expect you to: "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Use your knowledge to actively make your team better, not to sit back in\njudgement or frustration. Recall the often the best way to learn is to teach\n(e.g. \"see one, do one, teach one\"); you will get more out of the class if\nyou actively engage with all of your classmates, including those with less\nexperience."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Understand you can't do it alone. It may seem like you can do the project\nbetter or faster by yourself, but the end product will actually be worse if\nthe whole team can't (or doesn't) contribute. "}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"A "},{"type":"element","tagName":"a","properties":{"href":"https://faculty.washington.edu/ajko/papers/Li2015GreatEngineers.pdf"},"children":[{"type":"text","value":"recent\nstudy"}]},{"type":"text","value":" of\nwhat makes a great SW engineer at Microsoft, identified these attributes in\nengaging with teammates."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Creates shared context"}]},{"type":"text","value":": molding another person’s understanding of the\nsituation while tailoring the message to be relevant and comprehensible to\nthe other person."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Creates shared success"}]},{"type":"text","value":": enabling success for everyone involved, possibly\ninvolving personal compromises. "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Creates a safe haven"}]},{"type":"text","value":": creating a safe setting where engineers can learn\nand improve from mistakes and situations without negative consequences. "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"element","tagName":"strong","properties":{},"children":[{"type":"text","value":"Honest"}]},{"type":"text","value":": truthful (i.e. no sugar coating or spinning the situation for\ntheir own benefit)."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"comment","value":" Context slides, opens with figure from Li 2015 paper... "}],"data":{"quirksMode":false}},"frontmatter":{"path":"/lectures/lecture1-intro","title":"Lecture 1 - Introduction","name":"Lecture 1 - Intro"},"parent":{"__typename":"File","id":"4e3dc8a1-48c1-5b18-b597-5c14f76263e8","name":"lecture1-intro","modifiedTime":"Sep 2 2019 19:22"}}},"pageContext":{"isCreatedByStatefulCreatePages":false}}}