From f1c692c692aad9b7f0cb9a9b0170234fb434c250 Mon Sep 17 00:00:00 2001 From: Brooklin Date: Mon, 23 Jan 2023 12:07:24 -0800 Subject: [PATCH 1/2] Create a welcome lesson that new students will work through to learn PR flow. --- reading/start_here.livemd | 128 ++++++++++++++++++++++++++++++++++++++ start.livemd | 6 ++ 2 files changed, 134 insertions(+) create mode 100644 reading/start_here.livemd diff --git a/reading/start_here.livemd b/reading/start_here.livemd new file mode 100644 index 000000000..66e2ae5fc --- /dev/null +++ b/reading/start_here.livemd @@ -0,0 +1,128 @@ +# Start Here + +```elixir +Mix.install([ + {:jason, "~> 1.4"}, + {:kino, "~> 0.8.0", override: true}, + {:youtube, github: "brooklinjazz/youtube"}, + {:hidden_cell, github: "brooklinjazz/hidden_cell"} +]) +``` + +## Navigation + +[Return Home](../start.livemd) +[Report An Issue](https://github.com/DockYard-Academy/beta_curriculum/issues/new?assignees=&labels=&template=issue.md&title=) + +## Setup + +Ensure you type the `ea` keyboard shortcut to evaluate all Elixir cells before starting. Alternatively you can evaluate the Elixir cells as you read. + +## Welcome + +Welcome to DockYard Academy. We are proud to offer a fully open-source Elixir curriculum that anyone can access for free. We use this curriculum for our (paid) academy. + +If you would like to be considered for a future cohort, you can signup for our [Newsletter](https://academy.dockyard.com/) to receive updates. + +## The DockYard Academy Way + +At DockYard Academy, our mission is to provide high-quality training in Elixir. We strive to empower our students with the skills and knowledge they need to become professional web developers, equipped with the ability to build robust and scalable web applications using the powerful Elixir programming language and its associated frameworks. + +We believe in providing a hands-on, practical learning experience and dedicate ourselves to preparing our students for the real-world challenges of building web applications. We foster a community of learners who are passionate about web development and who continue to learn and grow throughout their careers. + +## Academy Core Values + +* **Practicality**: We value hands-on learning experiences directly relevant to the real-world challenges of building web applications with Elixir. Instructors will provide a broader context to the material and share relevant experiences in the industry. +* **Engagement**: Classes focus on active, engaged learning rather than passive lectures. Students will be front and center as they learn through building projects, group discussions, and collaborative problem solving. +* **Collaboration and Community**: DockYard Academy fosters a supportive community of learners who can learn from each other and work together to achieve their goals. We believe in the importance of teamwork and strive to provide opportunities for our students to work together and learn from each other's experiences. All community members treat each other with kindness, respect, and care. +* **Excellence**: We strive to provide our students with the highest quality education and training and hold ourselves to the highest standards of excellence in everything we do. +* **Humility**: We encourage our students to approach their learning journey with an open mind, being open to learning from their mistakes and their peers. Students are encouraged to feel comfortable expressing confusion and lack of understanding at all times. Saying “I don’t know” is always acceptable, especially when followed by a supportive and collaborative effort to learn and understand. Instructors and mentors will also embrace humility to create a positive and inclusive learning environment where students feel comfortable participating, learning, and providing open feedback. +* **Student Driven**: Students drive the pace of the class. Instructors and students work together to ensure core learning outcomes are achieved by every student while simultaneously offering high-achieving students additional opportunities to go beyond the material. + +## Learning Outcomes + +DockYard Academy aims to provide students with practical, hands-on training to prepare them with the skills to find Elixir employment or start their own Elixir efforts. Graduating students should be able to demonstrate the following outcomes: + +1. Understand Elixir fundamentals to solve practical programming problems. +2. Build Mix projects and manage configuration, dependencies, and tests. +3. Understand the principles of OTP and how to build fault-tolerant concurrent systems. +4. Use advanced Elixir syntax to write more expressive and efficient code. +5. Build full-stack web applications with Phoenix, including routing, controllers, views, and templates. +6. Manage Relational Databases with Ecto to model real-world data. +7. Use LiveView to build interactive, real-time web apps with minimal JavaScript. +8. Understand the best practices for developing robust and maintainable web applications with Elixir. +9. Troubleshoot and solve problems that arise while building web applications and Elixir programs. +10. Be able to find the resources needed to continue their learning journey after the course. + +## Lecture Schedule and Format + +For the full-time course, classes run Monday to Friday from 9:30 am to 3:00 pm (Pacific Time). Students will have a one-hour lunch break from noon to 1:00 pm (Pacific Time). + +## Meet Your Instructor + +Hello, I'm Brooklin Myers, I'm the instructor at DockYard Academy and the content creator behind the lessons and exercises in this course. I'm also the host of the Elixir Newbie podcast and write about Elixir on the Elixir Newbie website. Since entering Elixir, I've focused on helping new developers, and DockYard Academy has been a perfect opportunity to continue that mission. + +As a bootcamp graduate, I empathize with the struggle to enter the programming industry without a computer science background. With that in mind, I aspire to make technical concepts approachable for beginners. In addition, having transitioned to Elixir from JavaScript, I tailor lessons to help students from an object-oriented background transition to functional programming. + +In my classes, I aspire to create a low-stress environment for a high-stress activity. Learning can be difficult, but it's easier when you have a supportive group of mentors and peers surrounding you. I look forward to being your teacher. + +## Taking The Course + +Currently, there are two ways to take this course. + +1. **Self-Led (free)**: Anyone can work through this course and complete it at their own pace. +2. **Academy Student (paid)**: Students can join our official academy cohort to learn with an instructor, receive a certificate upon graduation, and get career support after graduation. Paid students also get access to class recordings and the DockYard Academy Discord, where they can receive support from their peers and mentors. + +If you are interested in joining our next cohort, you can sign up for our [Newsletter](https://academy.dockyard.com/) or email brooklin.myers@dockyard.com to express your interest. + +This curriculum was designed and developed as an instructor-led course. However, a beginner should be able to go through the concepts self-led and at their own pace. We've done our absolute best to make this material approachable, and completely self-contained. + +That said, learning on your own can be challenging. To increase your chances of success, we recommend finding a mentor or a study group with other self-led students. + +## Solutions Branch + +We recommend you create a solutions branch to avoid making any commits on your `main` branch. This way, your `main` branch is clean if you want to contribute to DockYard Academy. + +Instructions are included in the [Student Setup Guide](https://github.com/DockYard-Academy/curriculum/wiki/Student-Setup-Guide). + +If you are unfamiliar with Git and GitHub, consider reading the [Lesson on Git](git.livemd) for an overview. + +## Troubleshooting and Support + +It's common to find yourself blocked and needing help when learning new concepts. This can be especially challenging for a self-led learner. If you need support or encounter any issues with a lesson, there is a [Report An Issue](https://github.com/DockYard-Academy/beta_curriculum/issues/new?assignees=&labels=&template=issue.md&title=) button you can use to get support. + +In addition, students in a DockYard Academy cohort (paid) get direct access to a community of peers and mentors on the DockYard Academy Discord. Post on the `#questions-and-answers` channel whenever you need support. + +## Post Lesson Breakdown + +There is a **Commit Your Progress** and a **Mark as Completed** section at the end of every lesson. We use these steps for tracking progress and receiving feedback from the instructors. These sections are primarily for active students rather than self-led learners. + +However, self-led students can complete these sections if they want to track their progress and get more practice using GitHub. We ask that you don't create pull requests to the DockYard Academy repo, as this spams our PR tracker. If you are not an academy student, we also ask that you refrain from @mentioning the instructor as this spams our notifications, and 1-1 feedback is only available to academy students. + +## Commit Your Progress + +Run the following in your command line from the curriculum folder to track and save your progress in a Git commit. +Ensure that you do not already have undesired or unrelated changes by running `git status` or by checking the source control tab in Visual Studio Code. + +``` +$ git checkout -b agents-and-ets-reading +$ git add . +$ git commit -m "finish agents and ets reading" +$ git push origin agents-and-ets-reading +``` + +Create a pull request from your `agents-and-ets-reading` branch to your `solutions` branch. +Please do not create a pull request to the DockYard Academy repository as this will spam our PR tracker. + +**DockYard Academy Students Only:** + +Notify your instructor by including `@BrooklinJazz` in your PR description to get feedback. +You (or your instructor) may merge your PR into your solutions branch after review. + +If you are interested in joining the next academy cohort, [sign up here](https://academy.dockyard.com/) to receive more news when it is available. + +## Up Next + +| Previous | Next | +| ------------------------------------------------------------------ | -------------------------------------------------: | +| [Concurrent Word Count](../exercises/concurrent_word_count.livemd) | [Agent Journal](../exercises/agent_journal.livemd) | diff --git a/start.livemd b/start.livemd index 94d004911..adbfdaabf 100644 --- a/start.livemd +++ b/start.livemd @@ -13,6 +13,12 @@ Welcome! If you do not see the box above, or if you encounter any issues with this course, please ensure you have correctly followed the [Student Setup Guide](https://github.com/DockYard-Academy/beta_curriculum/wiki/Student-Setup-Guide) or [Report An Issue](https://github.com/DockYard-Academy/beta_curriculum/issues/new?assignees=&labels=&template=issue.md&title=) to receive help. + + +### Welcome + +* [Start Here](reading/start_here.livemd) + ## Core Syntax ### Course Tools From 05045c03fd0e2489d94aa140444d47f468d092bd Mon Sep 17 00:00:00 2001 From: Brooklin Date: Mon, 23 Jan 2023 12:17:18 -0800 Subject: [PATCH 2/2] mix tasks and add welcome to readme outline ignore --- progress.json | 1 + reading/command_line.livemd | 6 +- reading/start_here.livemd | 58 ++++++++++++++++---- utils/lib/mix/tasks/update_readme_outline.ex | 3 +- 4 files changed, 54 insertions(+), 14 deletions(-) diff --git a/progress.json b/progress.json index ec4de7085..c298c1f19 100644 --- a/progress.json +++ b/progress.json @@ -145,6 +145,7 @@ "task_drills_exercise": false, "monster_spawner_exercise": false, "metaprogramming_reading": false, + "start_here_reading": false, "games_supervisor_setup_exercise": false, "pic_chat_pub_sub_reading": false, "lists_reading": false, diff --git a/reading/command_line.livemd b/reading/command_line.livemd index 7ae6681e9..99c632f95 100644 --- a/reading/command_line.livemd +++ b/reading/command_line.livemd @@ -498,6 +498,6 @@ If you are interested in joining the next academy cohort, [sign up here](https:/ ## Up Next -| Previous | Next | -| -------- | ---------------------------: | -| - | [Git](../reading/git.livemd) | +| Previous | Next | +| ------------------------------------------ | ---------------------------: | +| [Start Here](../reading/start_here.livemd) | [Git](../reading/git.livemd) | diff --git a/reading/start_here.livemd b/reading/start_here.livemd index 66e2ae5fc..4bbbea471 100644 --- a/reading/start_here.livemd +++ b/reading/start_here.livemd @@ -66,7 +66,7 @@ As a bootcamp graduate, I empathize with the struggle to enter the programming i In my classes, I aspire to create a low-stress environment for a high-stress activity. Learning can be difficult, but it's easier when you have a supportive group of mentors and peers surrounding you. I look forward to being your teacher. -## Taking The Course +## Taking the Course Currently, there are two ways to take this course. @@ -99,30 +99,68 @@ There is a **Commit Your Progress** and a **Mark as Completed** section at the e However, self-led students can complete these sections if they want to track their progress and get more practice using GitHub. We ask that you don't create pull requests to the DockYard Academy repo, as this spams our PR tracker. If you are not an academy student, we also ask that you refrain from @mentioning the instructor as this spams our notifications, and 1-1 feedback is only available to academy students. +## Mark As Completed + + + +```elixir +file_name = Path.basename(Regex.replace(~r/#.+/, __ENV__.file, ""), ".livemd") + +save_name = + case Path.basename(__DIR__) do + "reading" -> "start_here_reading" + "exercises" -> "start_here_exercise" + end + +progress_path = __DIR__ <> "/../progress.json" +existing_progress = File.read!(progress_path) |> Jason.decode!() + +default = Map.get(existing_progress, save_name, false) + +form = + Kino.Control.form( + [ + completed: input = Kino.Input.checkbox("Mark As Completed", default: default) + ], + report_changes: true + ) + +Task.async(fn -> + for %{data: %{completed: completed}} <- Kino.Control.stream(form) do + File.write!( + progress_path, + Jason.encode!(Map.put(existing_progress, save_name, completed), pretty: true) + ) + end +end) + +form +``` + ## Commit Your Progress Run the following in your command line from the curriculum folder to track and save your progress in a Git commit. Ensure that you do not already have undesired or unrelated changes by running `git status` or by checking the source control tab in Visual Studio Code. ``` -$ git checkout -b agents-and-ets-reading +$ git checkout -b start-here-reading $ git add . -$ git commit -m "finish agents and ets reading" -$ git push origin agents-and-ets-reading +$ git commit -m "finish start here reading" +$ git push origin start-here-reading ``` -Create a pull request from your `agents-and-ets-reading` branch to your `solutions` branch. +Create a pull request from your `start-here-reading` branch to your `solutions` branch. Please do not create a pull request to the DockYard Academy repository as this will spam our PR tracker. **DockYard Academy Students Only:** -Notify your instructor by including `@BrooklinJazz` in your PR description to get feedback. -You (or your instructor) may merge your PR into your solutions branch after review. +Notify your teacher by including `@BrooklinJazz` in your PR description to get feedback. +You (or your teacher) may merge your PR into your solutions branch after review. If you are interested in joining the next academy cohort, [sign up here](https://academy.dockyard.com/) to receive more news when it is available. ## Up Next -| Previous | Next | -| ------------------------------------------------------------------ | -------------------------------------------------: | -| [Concurrent Word Count](../exercises/concurrent_word_count.livemd) | [Agent Journal](../exercises/agent_journal.livemd) | +| Previous | Next | +| -------- | ---------------------------------------------: | +| - | [Command Line](../reading/command_line.livemd) | diff --git a/utils/lib/mix/tasks/update_readme_outline.ex b/utils/lib/mix/tasks/update_readme_outline.ex index ddb937d7d..890fcd92a 100644 --- a/utils/lib/mix/tasks/update_readme_outline.ex +++ b/utils/lib/mix/tasks/update_readme_outline.ex @@ -9,6 +9,7 @@ defmodule Mix.Tasks.Bc.UpdateReadmeOutline do @course_outline_path Path.join([@root_path, "start.livemd"]) @outline_start_comment "" @outline_end_comment "" + @ignored_sections ["## Overview", "### Welcome"] def run(_args) do course_outline = File.read!(@course_outline_path) @@ -33,7 +34,7 @@ defmodule Mix.Tasks.Bc.UpdateReadmeOutline do @spec sections(String.t()) :: String.t() def sections(outline) do Regex.scan(~r/(\#{2,3})(.+)/, outline) - |> Enum.reject(fn [full, _, _] -> full =~ "Overview" end) + |> Enum.reject(fn [full, _, _] -> full in @ignored_sections end) |> Enum.map(fn [full, "##", _heading] -> full <> "\n" [_, "###", subheading] -> "*#{subheading}\n"