<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kat Chuang</title>
    <description>The latest articles on DEV Community by Kat Chuang (@katychuang).</description>
    <link>https://dev.to/katychuang</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F471927%2F244bbfd9-fb8d-4855-9331-7b1807e7a391.jpg</url>
      <title>DEV Community: Kat Chuang</title>
      <link>https://dev.to/katychuang</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/katychuang"/>
    <language>en</language>
    <item>
      <title>Getting Started in Software Development Guide: Moving from Idea to Product</title>
      <dc:creator>Kat Chuang</dc:creator>
      <pubDate>Mon, 20 Sep 2021 02:01:32 +0000</pubDate>
      <link>https://dev.to/katychuang/getting-started-in-software-development-guide-moving-from-idea-to-product-54dc</link>
      <guid>https://dev.to/katychuang/getting-started-in-software-development-guide-moving-from-idea-to-product-54dc</guid>
      <description>&lt;p&gt;This is an introduction to software development tools, techniques, and processes. I wrote this up last year for a class to give a roadmap to the undergraduate CIS students as part of my larger collection of writings, &lt;a href="https://guides.drkat.dev"&gt;Getting Started Guides&lt;/a&gt; that aims to prepare them with practical skills used in industry. If you like this kind of content, I've love to know. Give it a ♥, follow me, and comment to let me know!&lt;/p&gt;

&lt;p&gt;This guide is written in three parts. &lt;/p&gt;

&lt;h2&gt;
  
  
  Part 1 - Planning
&lt;/h2&gt;

&lt;p&gt;The planning phase is where you divide the main goal into smaller, specific goals. &lt;/p&gt;

&lt;p&gt;A common model for presenting the phases of planning for and building software goes by the name of &lt;em&gt;Software Development Life Cycle (SDLC)&lt;/em&gt;. These are typical chunks of focused activities with any software project, each phase has its own set of processes, tools, and expectations. A typical project moves through the phases in the order listed in the table; to transform a rough idea into a specific plan, to the finished product. One might potentially cycle through these phases repeatedly depending on feedback throughout the whole project.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
   &lt;td colspan="2"&gt;
&lt;strong&gt;Phase&lt;/strong&gt;
   &lt;/td&gt;
   &lt;td&gt;
&lt;strong&gt;Tasks&lt;/strong&gt;
   &lt;/td&gt;
   &lt;td&gt;
&lt;strong&gt;Deliverables&lt;/strong&gt;
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td rowspan="4"&gt;Planning
   &lt;/td&gt;
   &lt;td&gt;
&lt;strong&gt;Requirements Gathering&lt;/strong&gt;&lt;br&gt; It helps to know what you’re building before you begin building. Deciding what to build comes from information gathered through discussions with all the stakeholders involved.
   &lt;/td&gt;
   &lt;td&gt;User Research, Market Research
   &lt;/td&gt;
   &lt;td&gt;User Stories
&lt;p&gt;
Spec List
   &lt;/p&gt;
&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;
&lt;strong&gt;Design / Specifications&lt;/strong&gt;&lt;br&gt; The general requirements scoped needs to be translated to technical specifications such as defining what done looks like, and picking appropriate tools to complete the work.
   &lt;/td&gt;
   &lt;td&gt;System Design
   &lt;/td&gt;
   &lt;td&gt;Data flow diagram
&lt;p&gt;
Flow Charts
&lt;/p&gt;
&lt;p&gt;
System Diagram
&lt;/p&gt;
&lt;p&gt;
Wireframes
&lt;/p&gt;
&lt;p&gt;
Mockups
   &lt;/p&gt;
&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;
&lt;strong&gt;Scheduling&lt;/strong&gt;&lt;br&gt; With the target(s) in mind, you need to figure out when to complete each feature and in what order. It helps to make shorter term mini sub-goals, such as weekly targets.
   &lt;/td&gt;
   &lt;td&gt;Estimations
   &lt;/td&gt;
   &lt;td&gt;Gantt Chart
&lt;p&gt;
Project Proposal
   &lt;/p&gt;
&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;
   &lt;/td&gt;
   &lt;td&gt;
   &lt;/td&gt;
   &lt;td&gt;Project Proposal
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td rowspan="2"&gt;Implementation
   &lt;/td&gt;
   &lt;td&gt;
&lt;strong&gt;Building&lt;/strong&gt;&lt;br&gt; 
This is the execution of your schedule. Check in with your sub-goal targets to ensure you’re on schedule.
   &lt;/td&gt;
   &lt;td&gt;Coding
&lt;p&gt;
Unit Tests
&lt;/p&gt;
&lt;p&gt;
Version Control
   &lt;/p&gt;
&lt;/td&gt;
   &lt;td&gt;Source Code
&lt;p&gt;
DB Schema
&lt;/p&gt;
&lt;p&gt;
Design Assets
   &lt;/p&gt;
&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;
&lt;strong&gt;Testing&lt;/strong&gt; &lt;br&gt;
Test your application against the initial requirements.
   &lt;/td&gt;
   &lt;td&gt;Testing
   &lt;/td&gt;
   &lt;td&gt;Testing report
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Delivery
   &lt;/td&gt;
   &lt;td&gt;
&lt;strong&gt;Delivery/Deployment&lt;/strong&gt;&lt;br&gt;
This is the final stage of the project, when you’re ready to deliver the project. For a website it can mean deploying the website to the server.
   &lt;/td&gt;
   &lt;td&gt;
   &lt;/td&gt;
   &lt;td&gt;Source Code 
&lt;p&gt;
Documentation
&lt;/p&gt;
&lt;p&gt;
User Guide
   &lt;/p&gt;
&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each of these phases are described in more detail in the next section, SDLC Phases, in the next main section.&lt;/p&gt;

&lt;h2&gt;
  
  
  Part 2 - Defining areas of responsibility on a software team
&lt;/h2&gt;

&lt;p&gt;A sampling of possible roles or teams on a project. This might be how you would generally break down areas of concern for a larger team web project. Or, if you’re working solo how you might allocate time to focused streams of work.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
  &lt;tr&gt;
   &lt;td&gt;
&lt;strong&gt;Role&lt;/strong&gt;
   &lt;/td&gt;
   &lt;td&gt;
&lt;strong&gt;General Responsibilities&lt;/strong&gt;
   &lt;/td&gt;
   &lt;td&gt;
&lt;strong&gt;Examples of Deliverables&lt;/strong&gt;
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Product
   &lt;/td&gt;
   &lt;td&gt;
&lt;ul&gt;

&lt;li&gt;Design the app based on market research

&lt;/li&gt;
&lt;li&gt;Figure out user needs

&lt;/li&gt;
&lt;li&gt;Deciding on features for the end user what it will look like
&lt;/li&gt;
&lt;/ul&gt;
   &lt;/td&gt;
   &lt;td&gt;
&lt;ul&gt;

&lt;li&gt;User stories or use cases

&lt;/li&gt;
&lt;li&gt;Wireframes and other mockup documents

&lt;/li&gt;
&lt;li&gt;Style guides that show look and feel
&lt;/li&gt;
&lt;/ul&gt;
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Database
   &lt;/td&gt;
   &lt;td&gt;
&lt;ul&gt;

&lt;li&gt;Compare possible database implementation solutions

&lt;/li&gt;
&lt;li&gt;Create and edit table(s)

&lt;/li&gt;
&lt;li&gt;Maintain tables

&lt;/li&gt;
&lt;li&gt;Curate content, create tables and maintain them

&lt;/li&gt;
&lt;li&gt;Backup plan(s) - How do you ensure data isn’t lost? 

&lt;/li&gt;
&lt;li&gt;Security plan for data - how do you secure data and work with backend team to decide on access/permissions
&lt;/li&gt;
&lt;/ul&gt;
   &lt;/td&gt;
   &lt;td&gt;
&lt;ul&gt;

&lt;li&gt;Table schema(s)

&lt;/li&gt;
&lt;li&gt;Creation statement code (any queries)

&lt;/li&gt;
&lt;li&gt;Data flow diagram

&lt;/li&gt;
&lt;li&gt;Write up comparing database options and rationale for selected DB product
&lt;/li&gt;
&lt;/ul&gt;
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Front-End / GUI
   &lt;/td&gt;
   &lt;td&gt;
&lt;ul&gt;

&lt;li&gt;Implement designs

&lt;/li&gt;
&lt;li&gt;Discuss with product the feasibility and prioritization of features

&lt;/li&gt;
&lt;li&gt;Works with backend team in delivering new features
&lt;/li&gt;
&lt;/ul&gt;
   &lt;/td&gt;
   &lt;td&gt;
&lt;ul&gt;

&lt;li&gt;Front end code including template and static files 

&lt;/li&gt;
&lt;li&gt;Writeup of templating decisions i.e. do you want to separate out header to its own file? 

&lt;/li&gt;
&lt;li&gt;Write up the rationale for selecting the front end stack. Are you using frameworks, etc? 
&lt;/li&gt;
&lt;/ul&gt;
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Back-End
   &lt;/td&gt;
   &lt;td&gt;
&lt;ul&gt;

&lt;li&gt;Work with front end and database to architect the app

&lt;/li&gt;
&lt;li&gt;Build data flows for transforming data, (i.e restful api) and transformations for access by the frontend
&lt;/li&gt;
&lt;/ul&gt;
   &lt;/td&gt;
   &lt;td&gt;
&lt;ul&gt;

&lt;li&gt;Back end code including models to connect to database schema 

&lt;/li&gt;
&lt;li&gt;Writeup of architectural decisions like how’d you decide on route handling?

&lt;/li&gt;
&lt;li&gt;System architecture diagram
&lt;/li&gt;
&lt;/ul&gt;
   &lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
   &lt;td&gt;Quality Control
   &lt;/td&gt;
   &lt;td&gt;
&lt;ul&gt;

&lt;li&gt;Develop a testing strategy. Could be both manual and automated testing strategies

&lt;/li&gt;
&lt;li&gt;Convert requirements and design documents to a set of testing cases and scripts
&lt;/li&gt;
&lt;/ul&gt;
   &lt;/td&gt;
   &lt;td&gt;
&lt;ul&gt;

&lt;li&gt;Test plan with an overview of test cases

&lt;/li&gt;
&lt;li&gt;Reports of tests performed and their performance    

&lt;/li&gt;
&lt;li&gt;Define app parameters or configurations for regular tests versus edge case tests. 

&lt;/li&gt;
&lt;li&gt;Define scope of tests - i.e. are you testing mobile and/or desktop? 
&lt;/li&gt;
&lt;/ul&gt;
   &lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Part 3 - Software Development Life Cycle (SDLC) Phases
&lt;/h2&gt;

&lt;p&gt;There are specific chunks of focused activities and sample deliverables for each type of activity. Some teams might go through each of these phases slowly once through the cycle (i.e. Waterfall model), or go through shorter bursts of work of the entire cycle repeatedly (i.e. Agile). Some teams might even take a rapid pace through the phases in the matter of days or weeks to reach a &lt;em&gt;proof of concept&lt;/em&gt; prototype before cycling back to progress again for a more thorough attempt. Other times, a project such as a distributed system of many components, requires conducting a cycle through feature development of one component before moving on to the next. &lt;/p&gt;

&lt;h3&gt;
  
  
  Requirements Gathering
&lt;/h3&gt;

&lt;p&gt;The purpose of this phase is to gather relevant and useful information. &lt;/p&gt;

&lt;p&gt;There are many avenues to gather information. You can compare with similar projects to see what features they exhibit, which is a form of &lt;em&gt;competitive analysis&lt;/em&gt;. When you host focused conversations to gather information you can select end users who will be using the software, which is called &lt;em&gt;user research&lt;/em&gt;. Or you can speak with other stakeholders such as the people interested in sponsoring the project for their wishlist of features. The resulting list is the requirements for the project. &lt;br&gt;
When describing this list of features, it helps to be as specific as possible. Some teams use a type of description called user stories to highlight possible use case scenarios. The focus of the descriptions tends to be external facing, that is the non-technical uses.&lt;/p&gt;

&lt;h3&gt;
  
  
  Design / Specifications
&lt;/h3&gt;

&lt;p&gt;The purpose of this phase is to convert the user stories into well-defined, specific building blocks of the eventual architecture. &lt;/p&gt;

&lt;p&gt;This may be presented as a textual description that describes data transformations from raw data source to its final form and any tools used to make that happen. This kind of information may also be presented graphically and with high level or abstract manners as a &lt;em&gt;flowchart&lt;/em&gt; or a &lt;em&gt;data flow diagram&lt;/em&gt;. Eventually details in the high level diagram are decided and they flesh out to create a detailed diagram showing the architecture of the software. Examples of these architectural diagrams are available at &lt;a href="https://github.com/donnemartin/system-design-primer"&gt;The System Design Primer&lt;/a&gt; by Donne Martin.&lt;/p&gt;

&lt;p&gt;The user interface (UI) might also be sketched out. You can have high level &lt;em&gt;wireframes&lt;/em&gt; that give a sense of a general layout, &lt;em&gt;storyboards&lt;/em&gt; that show how the end user would move through pages. During this phase some teams might create a &lt;em&gt;mockup&lt;/em&gt;, which is a sample prototype to trial ideas to help with decision making of various options for implementation. You can create a &lt;em&gt;low fidelity&lt;/em&gt; (i.e. pencil and paper sketch) or a &lt;em&gt;high fidelity&lt;/em&gt; (i.e. html+css) version, or both versions depending on time available. &lt;/p&gt;

&lt;p&gt;For example, the building block could be building a login feature to a website. A database would need to be selected for where user information is stored, to compare against user input. The user input fields on a UI would have to be defined. Further, the connecting mechanism between the UI and database would have to be defined. &lt;br&gt;
One the building blocks are defined, you are ready to schedule the work. &lt;/p&gt;

&lt;h3&gt;
  
  
  Scheduling
&lt;/h3&gt;

&lt;p&gt;The purpose of this phase is to be able to define &lt;em&gt;when&lt;/em&gt; to complete the work as well as who will complete the work. In effect, this turns a specific plan into a plan of action.&lt;/p&gt;

&lt;p&gt;It is easier to schedule well defined blocks that come  from the design/specification phase.The nature of software projects, of doing something new for the first time, is such that figuring out an appropriate schedule can require shifting between this phase and the previous several times to arrive at a specific plan of action that defines &lt;em&gt;who&lt;/em&gt; will work on &lt;em&gt;what&lt;/em&gt;, and &lt;em&gt;when&lt;/em&gt; each task will start and complete.&lt;/p&gt;

&lt;p&gt;For example, the building block of building a login feature to a website. The tasks might include installing a database (i.e. PostGres) and creating the database schema; then connecting a web framework to connect to the database to allow retrieving information. The decisions being made in the scheduling phase is to decide who will be working on each task, the time allotted to each task, and the order in which it will be completed.&lt;br&gt;
One might set specific targets or &lt;em&gt;milestones&lt;/em&gt;, to indicate a checkpoint.&lt;/p&gt;

&lt;h3&gt;
  
  
  Building
&lt;/h3&gt;

&lt;p&gt;The purpose of this phase is to complete the items specified in the plan (often, such a plan appears in a project proposal that specifies the work to be done before the work begins). If the specifications for the end product are well defined, it becomes a straightforward process to build the software without much delays and obstacles. When the schedule is well defined, at the time of the check-point it becomes clear what should have been done by that point.&lt;/p&gt;

&lt;p&gt;Some teams use project management software (i.e. a kanban board or Jira) to track the work that needs to be done. All software teams should be using a version control system (VCS) to track changes in their source code. Git is very common these days, but it isn't the only choice out there.&lt;/p&gt;

&lt;h3&gt;
  
  
  Testing
&lt;/h3&gt;

&lt;p&gt;The purpose of this phase is to ensure that your product is of high quality by using various deliberate scenarios. It would mean for example that it operates as expected for certain inputs. For example if it’s a calculator then the rules of addition should follow mathematical principles. Or perhaps you are working on a website and you want it to look polished to the end user on both desktop and mobile, so you would want to preview on both types of devices.&lt;/p&gt;

&lt;p&gt;Another reason for coming up with a test plan beyond measuring the build quality is to have in writing some form of explicitly defined limits to the end of your work, particularly if you’re working on an open ended project that doesn’t have a clear finishing point. By defining test cases that align with the requirements, it becomes easier to identify when you are done with the project. It becomes easier to measure whether you’ve completed the work you set out to do.&lt;/p&gt;

&lt;h3&gt;
  
  
  Delivery / Deployment
&lt;/h3&gt;

&lt;p&gt;The purpose of this phase is to ensure that the product can get into the hands of the intended end user.&lt;/p&gt;

&lt;p&gt;If this is an application that will see new releases while in production, then a continuous integration (CI) process would be good to have in order to think about how to release updates. Sometimes the continuous integration is paired with an automated testing plan.&lt;/p&gt;

&lt;p&gt;Many times a complete product comes with documentation to explain the work that was done, the specifications of the program (such as inputs, configuration settings, and outputs) and features included. Source code is often provided as well as an executable (if it’s a desktop application), or a deployed version (if it’s a web application). &lt;/p&gt;

</description>
      <category>productdesign</category>
      <category>designthinking</category>
      <category>systemthinking</category>
      <category>career</category>
    </item>
    <item>
      <title>Ramblings on reading skills</title>
      <dc:creator>Kat Chuang</dc:creator>
      <pubDate>Sat, 26 Sep 2020 01:03:55 +0000</pubDate>
      <link>https://dev.to/katychuang/ramblings-on-reading-skills-4i71</link>
      <guid>https://dev.to/katychuang/ramblings-on-reading-skills-4i71</guid>
      <description>&lt;p&gt;Over the past year I've had a number of conversations with both industry and academic folks about the importance of reading for future college graduates. Reading is very important for discerning key information related to job postings, but also in the course of completing everyday activities, such as following instructions. &lt;/p&gt;

&lt;p&gt;Reading is a huge part of a developer's career. Some areas where reading is very important: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Reading to learn new technologies (new frameworks, new releases, new languages, etc)&lt;/li&gt;
&lt;li&gt;Reading to understand the spec requirements&lt;/li&gt;
&lt;li&gt;Reading the error message(s)&lt;/li&gt;
&lt;li&gt;Reading a batch script, makefile, package dependency file&lt;/li&gt;
&lt;li&gt;Reading the README
... and so forth&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There is a tipping moment when an aspiring developer goes from seeing a block of text to having developed eagle eyes to see keywords in the text. Around this time, one becomes more accustomed to the navigation of skimming text quickly or reading in depth and knowing whether to speed up or speed down. I don't think it's a normal part of most CS undergraduate education to learn about reading as a way to communicate with other developers. Closest thing I learned in school was in PhD studies where I had cohorts from other fields like social science, psychology, anthropology, and so forth that focused a lot more on interpersonal communication etiquette and had formal ways to articulate the way the human mind picks up new information. The more I think about it, the more my thoughts start to align with Bloom's Taxonomy of learning or Dreyfus Model of skill acquisition.&lt;/p&gt;

&lt;p&gt;So far I have only the beginnings of a crude framework for reading skills related to CS education. Note I'm thinking aloud on the spot here, these thoughts will not hold up under scrutiny.&lt;/p&gt;

&lt;p&gt;From basic to more sophisticated: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Basic Reading: at the starting level, one learns to read information that's written down. Maybe it's reading the syllabus or homework description before asking questions.&lt;/li&gt;
&lt;li&gt;Reading more: at the next level one learns to read more than 1 source because 1 particular text may not be the right fit. To read beyond the prescribed short list. To dive deeper into a topic.&lt;/li&gt;
&lt;li&gt;Reading with discernment: reading critically and analytically. Did the author really mean ___? Maybe this part that doesn't make sense is a typo? Perhaps and error message of, "file not found" is telling me something about the filename as input.&lt;/li&gt;
&lt;li&gt;Reading with problem solving: in reading with intent, one can ascertain what is and isn't relevant and continue seeking for what is relevant. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Hmm. Maybe these categories don't apply to the activity of programming. When one first start programming, everything looks like gibberish. Over time, one slowly notices the structures (much like Neo in The Matrix) and can follow the patterns. Example from a class on terminal commands:&lt;/p&gt;

&lt;p&gt;Exercise 1: Try different commands... &lt;code&gt;ls; ls -l; pwd&lt;/code&gt; and so forth&lt;/p&gt;

&lt;p&gt;Exercise 2: Try stringing together different commands... &lt;code&gt;pwd &amp;amp;&amp;amp; ls -l &amp;amp;&amp;amp; echo "hello world!"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Exercise 3: Create myscript.sh and put the commands in a script file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;pwd
&lt;/span&gt;javac HelloWorld.java
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"hello world!"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is where some students "got lost", which as a designer I knew immediately that comments and syntax highlighting would help separate the lines to show it's different commands.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#! /usr/bin/local/bash  &lt;/span&gt;
&lt;span class="c"&gt;# first line is shebang line to define which shell version to use&lt;/span&gt;

&lt;span class="c"&gt;# print working directory (pwd)&lt;/span&gt;
&lt;span class="nb"&gt;pwd&lt;/span&gt;   &lt;span class="c"&gt;# shows path to current directory&lt;/span&gt;

&lt;span class="c"&gt;# compile a Java file. &lt;/span&gt;
&lt;span class="c"&gt;# Won't work because we don't have this file HelloWorld.java&lt;/span&gt;
javac HelloWorld.java

&lt;span class="c"&gt;# list contents of directory&lt;/span&gt;
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;  &lt;span class="c"&gt;# -l is flag option to show in long form &lt;/span&gt;

&lt;span class="c"&gt;# print "hello world" to output&lt;/span&gt;
&lt;span class="c"&gt;# works like System.out.println("hello world!");&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"hello world!"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Change permissions for myscript.sh &lt;code&gt;chmod +x myscript.sh&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;and run the script &lt;code&gt;./myscript.sh&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I think I lost the class again around here..  "Professor I copied and pasted &lt;code&gt;javac HelloWorld.java&lt;/code&gt; and it had an error."  Hmm..&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Ramblings of a CS educator</title>
      <dc:creator>Kat Chuang</dc:creator>
      <pubDate>Sun, 20 Sep 2020 17:30:37 +0000</pubDate>
      <link>https://dev.to/katychuang/ramblings-of-a-teaching-cs-educator-5e6j</link>
      <guid>https://dev.to/katychuang/ramblings-of-a-teaching-cs-educator-5e6j</guid>
      <description>&lt;p&gt;The 4th week of the 16 week long semester just ended (for those who want precision in the calculation - it's a 15 week semester but there are some holidays in between to push past a 15-week span) and it's as good a time as any to record observations else I will forget it until next semester :) I am teaching data structures class, the 3rd CS class in the series (prior 2 courses are on learning programming techniques). Data structure continues to be a challenge to teach, I continue to delve into pondering over why. To set the tone of these observations I want to point out that generally there is a wide range of levels in the class, so the observations don't apply to the whole class. It is by no means a reflection of any particular student performance, but rather my surprise that some things that &lt;em&gt;seem&lt;/em&gt; obvious are actually not.&lt;/p&gt;

&lt;p&gt;I'm on my 3rd year of teaching data structures class, I am starting to notice common patterns in student behavior. I haven't thought about this long enough to pick apart and think of solutions, wanted to write down thoughts relating to particularly exasperating moments to revisit at a later time. My perspective is one who is coming from industry, especially one that is of high intensity &lt;em&gt;"get things done (yesterday)",&lt;/em&gt; not sure how common that is but it provides a stark contrast to the academic environment. I don't claim to know what's the &lt;em&gt;right way&lt;/em&gt; to educate CS, I am learning, and certainly my experiences could not be generalized across all towns, universities, programs, nor industries. I am aiming to point out the moments of interesting conflicts in expectations between students and myself. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;When there seems to be a fearful attitude towards coding amongst students. It seems that coding holds a certain mystique. I noticed this because it can be one of several ways: (a) when they think there is &lt;em&gt;only&lt;/em&gt; one perfect answer, (b) when they lack the instinct to look at documentation but expect to be spoonfed the answer, or (c) they forget coding should be done after thinking through the problem and pseudo-coding. If anything, coding is more like being a legal practitioner, of knowing how to navigate a bunch of rules for various scenarios. &lt;/li&gt;
&lt;li&gt;Lack of what I call a "defensive coding"
stance (I borrow the term from defensive driving). Some time ago in industry I learned of test driven development (TDD) and it's changed my life in being conscious while coding. That is, think about expectations of input and output with each line written. Keep code that spark joy. I've been noticing a lack of principled technique while debugging code where (a) students aren't thinking to check that file inputs are as they expect before jamming it through their code, (b) they aren't checking the type expected from one line to the next (Java code, so there is a need to consider type strictness). &lt;/li&gt;
&lt;li&gt;There is also a lack of systems thinking for constructing a 'pipeline' of functions.. my exposure to terminal commands and functional programming over the years must've helped with visualize a pipeline stream of conversion steps. Students will stare at their code for hours instead of thinking to print output for debugging and think about how one step can be transitioned to the next step.&lt;/li&gt;
&lt;li&gt;Not realizing they are authors of source code that is meant for humans to read. They're still at the stage of being hyper-focused in, &lt;em&gt;"I need the machine to compile this"&lt;/em&gt;.. so much that even when I assign points to homework for documentation and comments specifically they seemingly still forget to add comments 😆  Many these my students could be great accountants with how much they care about points, so that's interesting. Curious if they write comments, would that help with tackling problems directly, swiftly?&lt;/li&gt;
&lt;li&gt;Relating to the mystique of CS, a growth mindset may be lacking. Some students have a fixed mindset, they lack of feeling empowered to see that any self-actions can lead to rewarding outcomes. CS educators often talk about breaking larger problems down to manageable tasks and this can immediately apply to a semester of learning. Some students will think as they see the course contents, &lt;em&gt;"I cannot do this, I don't have a Ph.D.,"&lt;/em&gt; instead of realizing that a journey begins with a single step. That is, they may not know everything yet (sure, the semester just started) but something like 5 minutes to glance at 3 slides that were designed like a picture book can probably answer a few basic questions.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As I write this, I realize I have more thoughts but I will do the healthy thing of taking a break and resuming the musings later because there is still the rest of the weekend to enjoy before the week starts! Ciao.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
