diff --git a/2_predictive_stepping/.assets/what_is_programming.png b/.assets/what_is_programming.png similarity index 100% rename from 2_predictive_stepping/.assets/what_is_programming.png rename to .assets/what_is_programming.png diff --git a/1_development_workflows/deliverables.md b/1_development_workflows/deliverables.md index bee32cc..8340554 100644 --- a/1_development_workflows/deliverables.md +++ b/1_development_workflows/deliverables.md @@ -9,7 +9,8 @@ interests, and anything else you'd like to share. - [ ] You created your Profile README repository using [the template `username` repository](https://github.com/MIT-Emerging-Talent/username) -- [ ] All of the CI checks pass under the Actions tab +- [ ] Your repository’s name matches your GitHub username. +- [ ] All of the CI checks pass under the Actions tab. _Or_ you commented the lines that failed CI checks explaining why you broke the rule to get the README you wanted. (eg. “I used HTML to align the image in the center”) ## Suggested Study diff --git a/2_predictive_stepping/README.md b/2_predictive_stepping/README.md index 4ab0e10..7e38b18 100644 --- a/2_predictive_stepping/README.md +++ b/2_predictive_stepping/README.md @@ -40,7 +40,7 @@ then communicating with everyone involved to deliver quality software within your project's constraints. This diagram shows the different channels of communication in a simple Python program: -![a program](./.assets/what_is_programming.png) +![a program](../.assets/what_is_programming.png) > PS. In the examples and exercises for this chapter you will be both the > developer and the user, running the program and interacting with it from diff --git a/2_predictive_stepping/lesson_plan.md b/2_predictive_stepping/lesson_plan.md index dcc5ce8..5f76ab0 100644 --- a/2_predictive_stepping/lesson_plan.md +++ b/2_predictive_stepping/lesson_plan.md @@ -59,7 +59,7 @@ class: center ## What is Programming? -What is programming? +What is programming? --- diff --git a/3_documenting_and_testing/behavior_strategy_implementation.md b/3_documenting_and_testing/behavior_strategy_implementation.md index a82057e..3be5691 100644 --- a/3_documenting_and_testing/behavior_strategy_implementation.md +++ b/3_documenting_and_testing/behavior_strategy_implementation.md @@ -113,14 +113,14 @@ for index in range(2, 500): assert two_back + one_back == current, f"entry {index} is not correct" -# %% does the function return the same or different arrays? +# %% does the function return the same or different lists? -array_1 = fibonacci_list(4) -array_2 = fibonacci_list(6) +list_1 = fibonacci_list(4) +list_2 = fibonacci_list(6) -# the function returned two different arrays with the same values -assert array_1 == array_2, "the arrays store the same values" -assert array_1 is not array_2, "the variables do not reference the same array" +# the function returned two different lists with the same values +assert list_1 == list_2, "the lists store the same values" +assert list_1 is not list_2, "the variables do not reference the same list" ``` diff --git a/4_debugging/philosophy_of_debugging.md b/4_debugging/philosophy_of_debugging.md index d5977ed..d59b058 100644 --- a/4_debugging/philosophy_of_debugging.md +++ b/4_debugging/philosophy_of_debugging.md @@ -143,7 +143,7 @@ simple. For the above example the symptom corresponds to the line where the variable went out of bounds or to the `print`s which produced the garbage output. The incorrect behavior will correspond to a variable with a bad value. Identify the variable(s) with bad values. For this example, suppose that the program -crashes on line 112 because i is -1 and tries to index an array. +crashes on line 112 because i is -1 and tries to index an list. The critical question is: where did i get its value? There are basically three ways a variable can get a value: the variable appears on the left hand side of a diff --git a/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/0_docstring.py b/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/0_docstring.py index 829530c..dfc4813 100644 --- a/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/0_docstring.py +++ b/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/0_docstring.py @@ -3,7 +3,7 @@ This function does not modify the argument list. Parameters: - list[dict[str, str]]: an array of dicts with string keys and string values + list[dict[str, str]]: an list of dicts with string keys and string values str: the function will remove all dicts that don't have this key Returns: a list of dicts where each dict contains the given key, diff --git a/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/1a_generated_tests.py b/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/1a_generated_tests.py index b9b8524..6ad0857 100644 --- a/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/1a_generated_tests.py +++ b/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/1a_generated_tests.py @@ -7,7 +7,7 @@ def f(lst, key): This function does not modify the argument list. Parameters: - list[dict[str, str]]: an array of dicts with string keys and string values + list[dict[str, str]]: an list of dicts with string keys and string values str: the function will remove all dicts that don't have this key Returns: a list of dicts where each dict contains the given key, diff --git a/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/1b_manual_refactor_tests.py b/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/1b_manual_refactor_tests.py index 798a48d..19acdf8 100644 --- a/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/1b_manual_refactor_tests.py +++ b/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/1b_manual_refactor_tests.py @@ -7,7 +7,7 @@ def f(lst, key): This function does not modify the argument list. Parameters: - list[dict[str, str]]: an array of dicts with string keys and string values + list[dict[str, str]]: an list of dicts with string keys and string values str: the function will remove all dicts that don't have this key Returns: a list of dicts where each dict contains the given key, diff --git a/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/2b_manual_refactor_function.py b/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/2b_manual_refactor_function.py index 4d7d3c5..a4808c9 100644 --- a/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/2b_manual_refactor_function.py +++ b/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/2b_manual_refactor_function.py @@ -7,7 +7,7 @@ def f(lst, key): This function does not modify the argument list. Parameters: - list[dict[str, str]]: an array of dicts with string keys and string values + list[dict[str, str]]: an list of dicts with string keys and string values str: the function will remove all dicts that don't have this key Returns: a list of dicts where each dict contains the given key, diff --git a/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/2c_generated_refactor_function.py b/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/2c_generated_refactor_function.py index 353b8b8..26c2a36 100644 --- a/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/2c_generated_refactor_function.py +++ b/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/2c_generated_refactor_function.py @@ -8,7 +8,7 @@ def f(lst, key): This function does not modify the argument list. Parameters: - list[dict[str, str]]: an array of dicts with string keys and string values + list[dict[str, str]]: an list of dicts with string keys and string values str: the function will remove all dicts that don't have this key Returns: a list of dicts where each dict contains the given key, diff --git a/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/2d_manual_refactor_function.py b/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/2d_manual_refactor_function.py index e58068a..79d664f 100644 --- a/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/2d_manual_refactor_function.py +++ b/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/2d_manual_refactor_function.py @@ -7,7 +7,7 @@ def f(lst, sort_key): This function does not modify the argument list. Parameters: - list[dict[str, str]]: an array of dicts with string keys and string values + list[dict[str, str]]: an list of dicts with string keys and string values str: the function will remove all dicts that don't have this key Returns: a list of dicts where each dict contains the given key, diff --git a/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/3_polish_implementation.py b/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/3_polish_implementation.py index 866d01e..5bf030e 100644 --- a/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/3_polish_implementation.py +++ b/5_tdd_with_llms/examples/filter_and_sort_dictionaries_with_llm/3_polish_implementation.py @@ -17,7 +17,7 @@ def filter_and_sort_dictionaries( This function does not modify the argument list. Parameters: - list[dict[str, str]]: an array of dicts with string keys and string values + list[dict[str, str]]: an list of dicts with string keys and string values str: the function will remove all dicts that don't have this key Returns: a list of dicts where each dict contains the given key, diff --git a/6_recursion/2_visualize_recursion/exercises/count_items.py b/6_recursion/2_visualize_recursion/exercises/count_items.py index 3a8a2da..47235d7 100644 --- a/6_recursion/2_visualize_recursion/exercises/count_items.py +++ b/6_recursion/2_visualize_recursion/exercises/count_items.py @@ -12,7 +12,7 @@ - comment @trace_recursion and debug the function or copy the function into one of these sites: - https://www.recursionvisualizer.com -- (https://recursion.vercel.app +- https://recursion.vercel.app - https://recursion-visualizer.vercel.app - https://visualgo.net/en/recursion diff --git a/6_recursion/2_visualize_recursion/exercises/fibonacci.py b/6_recursion/2_visualize_recursion/exercises/fibonacci.py index 621b226..0c0d26f 100644 --- a/6_recursion/2_visualize_recursion/exercises/fibonacci.py +++ b/6_recursion/2_visualize_recursion/exercises/fibonacci.py @@ -12,7 +12,7 @@ - comment @trace_recursion and debug the function or copy the function into one of these sites: - https://www.recursionvisualizer.com -- (https://recursion.vercel.app +- https://recursion.vercel.app - https://recursion-visualizer.vercel.app - https://visualgo.net/en/recursion diff --git a/6_recursion/2_visualize_recursion/exercises/fibonacci_memo.py b/6_recursion/2_visualize_recursion/exercises/fibonacci_memo.py index d7150b1..0211a47 100644 --- a/6_recursion/2_visualize_recursion/exercises/fibonacci_memo.py +++ b/6_recursion/2_visualize_recursion/exercises/fibonacci_memo.py @@ -12,7 +12,7 @@ - comment @trace_recursion and debug the function or copy the function into one of these sites: - https://www.recursionvisualizer.com -- (https://recursion.vercel.app +- https://recursion.vercel.app - https://recursion-visualizer.vercel.app - https://visualgo.net/en/recursion diff --git a/6_recursion/3_use_recursion/1_debug/fibonacci.py b/6_recursion/3_use_recursion/1_debug/fibonacci.py index bdf2e6c..7d8d072 100644 --- a/6_recursion/3_use_recursion/1_debug/fibonacci.py +++ b/6_recursion/3_use_recursion/1_debug/fibonacci.py @@ -13,10 +13,7 @@ @trace_recursion def fibonacci(n: int) -> int: - """ - - """ - if n < 0: + if n <= 0: return 0 if n == 1: @@ -30,6 +27,7 @@ def fibonacci(n: int) -> int: print(fibonacci(0), 'should be', 0) print(fibonacci(1), 'should be', 1) print(fibonacci(2), 'should be', 1) +print(fibonacci(3), 'should be', 2) print(fibonacci(4), 'should be', 3) print(fibonacci(6), 'should be', 8) print(fibonacci(8), 'should be', 21) diff --git a/6_recursion/3_use_recursion/1_debug/fibonacci_memo.py b/6_recursion/3_use_recursion/1_debug/fibonacci_memo.py index 696c210..0278bf2 100644 --- a/6_recursion/3_use_recursion/1_debug/fibonacci_memo.py +++ b/6_recursion/3_use_recursion/1_debug/fibonacci_memo.py @@ -34,6 +34,7 @@ def fibonacci_memo(n: int, memo: dict = {}) -> int: print(fibonacci_memo(0), 'should be', 0) print(fibonacci_memo(1), 'should be', 1) print(fibonacci_memo(2), 'should be', 1) +print(fibonacci_memo(3), 'should be', 2) print(fibonacci_memo(4), 'should be', 3) print(fibonacci_memo(6), 'should be', 8) print(fibonacci_memo(8), 'should be', 21) diff --git a/6_recursion/code_along_using_recursion.py b/6_recursion/code_along_using_recursion.py index 9d8890d..376246b 100644 --- a/6_recursion/code_along_using_recursion.py +++ b/6_recursion/code_along_using_recursion.py @@ -13,14 +13,6 @@ @trace_recursion def reverse_list(to_reverse: list) -> list: - """ - behavior description - - base case : - argument description -> turn-around description - recursive case: - argument description -> ƒ(break-down description) build-up description - """ base_case = _ # must use to_reverse if base_case: turn_around = _ @@ -36,7 +28,6 @@ def reverse_list(to_reverse: list) -> list: print(reverse_list([]), 'should be', []) -print(reverse_list([1]), 'should be', [1]) -print(reverse_list(['a', 'b']), 'should be', ['a', 'b']) +print(reverse_list([1, 2]), 'should be', [2, 1]) print(reverse_list([1, 2, 3]), 'should be', [3, 2, 1]) print(reverse_list([3, 2, 1, 0, -1, -2, 3]), 'should be', [3, -2, -1, 0, 1, 2, 3]) diff --git a/6_recursion/lesson_plan.md b/6_recursion/lesson_plan.md index a8c2bd9..1c55c4b 100644 --- a/6_recursion/lesson_plan.md +++ b/6_recursion/lesson_plan.md @@ -156,11 +156,11 @@ class: middle, center ```py # a recursive strategy for counting the items in a list def count_items(list_of_things: list) -> int: - # base case: an empty array + # base case: an empty list if len(list_of_things) == 0: return 0 # turn-around: an empty list has 0 items - # break-down: create an array with 1 fewer items + # break-down: create an list with 1 fewer items list_without_last_item = list_of_things[:-1] # recursion: recursively count items in the smaller list previously_counted = count_items(list_without_last_item) @@ -217,10 +217,10 @@ def count_items(list_of_things: list) -> int: recursive case: a non-empty list -> ƒ(the list one item removed) + 1 """ - if len(list_of_things) == 0: # base case - return 0 # turn-around - # recursion, break-down, build-up - return count_items(list_of_things[:-1]) + 1 + if len(list_of_things) == 0: # base case + return 0 # turn-around + # recursion, break-down, build-up + return count_items(list_of_things[:-1]) + 1 # use the recursive solution to count items in this list count_items(['a', 'b', 'c', 'd']) @@ -260,14 +260,15 @@ class: middle, center # breaking down & recursing count_items(['a', 'b', 'c', 'd']) count_items(['a', 'b', 'c']) + 1 -count_items(['a', 'b']) + 1 + 1 -count_items(['a']) + 1 + 1 + 1 +(count_items(['a', 'b']) + 1) + 1 +((count_items(['a']) + 1) + 1) + 1 # base case -count_items([]) + 1 + 1 + 1 + 1 -# turning around & building up -0 + 1 + 1 + 1 + 1 -1 + 1 + 1 + 1 -2 + 1 + 1 +(((count_items([]) + 1) + 1) + 1) + 1 +# turning around +(((0 + 1) + 1) + 1) + 1 +# building up +((1 + 1) + 1) + 1 +(2 + 1) + 1 3 + 1 4 ``` diff --git a/7_code_review/.assets/collaborative_coding.png b/7_code_review/.assets/collaborative_coding.png new file mode 100644 index 0000000..b0adc39 Binary files /dev/null and b/7_code_review/.assets/collaborative_coding.png differ diff --git a/7_code_review/.assets/collaborative_writing.png b/7_code_review/.assets/collaborative_writing.png new file mode 100644 index 0000000..65b99b8 Binary files /dev/null and b/7_code_review/.assets/collaborative_writing.png differ diff --git a/7_code_review/README.md b/7_code_review/README.md index 39885ea..fb2ef9e 100644 --- a/7_code_review/README.md +++ b/7_code_review/README.md @@ -9,7 +9,7 @@ colleague's code and let them know what is good, what could be better, and suggest improvements if you can. The most important thing to keep in mind when writing a code review is: -- _Talk about the code, not the person._ +- _Review the code, not the person._ If there is something you would change in the code don't say "_you_ used a bad variable name", say something like "_this variable name_ could be more clear". diff --git a/7_code_review/deliverables.md b/7_code_review/deliverables.md index e69de29..4298342 100644 --- a/7_code_review/deliverables.md +++ b/7_code_review/deliverables.md @@ -0,0 +1,22 @@ +# Deliverables + +Working in a shared repository, you will each: + +- push 2+ completed code challenges with documentation and tests +- review 2+ of your classmates’ solutions using the code review checklist + +This is a chance to practice using GitHub features for code review, project management, and code quality automation. What you learn in this exercise will prepare you for the group Data Science projects in the certificate program. + +## Checklist + +- [ ] Your group used the repository we create for you +- [ ] Your group’s collaboration documents are all completed +- [ ] Your group’s project board is well-maintained +- [ ] All issues and pull requests have the correct labels (if necessary) so they are easy to find +- [ ] The code review checklist for each PR is completed before merging to `main` +- [ ] Each pull request either passes CI checks, or the failing CI checks are discussed in code review +- [ ] Each pull request is reviewed by at least one classmate using GitHub code review features before merging to `main` +- [ ] All code review discussions are positive and constructive - _review the code, not the person_ +- [ ] Your group used helpful branch naming conventions + +!! **Note** !! _You will not be assessed on how hard your coding challenges are_ !! !! diff --git a/7_code_review/lesson_plan.md b/7_code_review/lesson_plan.md index d64bf52..bdc0ab7 100644 --- a/7_code_review/lesson_plan.md +++ b/7_code_review/lesson_plan.md @@ -1 +1,259 @@ -# Lesson Plan +class: middle, center + + + +# Code Review + +
+ +Emerging Talent Logo + +--- + +class: middle, center + +## Synchronous Introductions + +--- + +class: middle + +## Agenda + +- **Learning Objectives** + +- **Challenges in Collaborative Programming** + +- **Code Review: _the golden rule_** + +- **Group Exercise: _Code Review Tools_** + +- **Setting Group Norms** + +- **Group Exercise: _Group Norms Guide_** + +- **The Repository: _a walk-through_** + +- **Next Steps: _many smaller or fewer larger groups?_** + +- **Next Steps: _group norms, review workflows, repo setup_** + +- **Discussion + Q&A** + +--- + +class: middle + +## Learning Objectives + +- **Review the code, not the person!** + +- You can explain some key challenges of collaborative coding + +- You understand the value of group norms and are ready to set your own + +- You understand the project's goals and evaluation + +- You are excited to begin studying collaborative development with your groups + +- You have seen all the folders and files in the project repository + +- **Not** GitHub Code Review tools, this is left for peer study and review sessions. + +- For self-study: _[objectives in the README](./README.md#learning-objectives)_ + +--- + +class: middle, center + +## Collaborative Programming is Collaborative Writing + +What is programming? +--- + +class: middle, center + +## Collaborative Writing + +![collaborative writing](./.assets/collaborative_writing.png) + +--- + +class: middle, center + +## Collaborative Programming + +collaboratie coding + +--- + +class: middle + +## Challenges in Collaborative Writing + +- **Shared Understanding** - A _shared_ understanding of the _project goals_. + +- **Consistent Communication** - Clear communication _channels_ and _conventions_. + +- **Task Division** - Defining tasks that can be _completed separately_ and _reassembled_. + +- **Task Tracking** - Reliably tracking _ownership_ and _progress_ of all tasks. + +- **Proofreading** - _Reviewing_ each other’s work and providing _constructive feedback_. + +- **Reassembling** - _Merging_ separate tasks into one _coherent_ finished product. + +- **Merge Conflicts** - _Resolving conflicts_ when two people have _edited the same lines_. + +- **Backtracking** - Returning to a _previous version_ of the project _when necessary_ + +--- + +class: middle, center + +## Code Review: _the golden rule_ + +
+
+ +# Review the code, not the person + +--- + +class: middle, center + +## Collaborative Writing: _Group Exercise_ + +
+
+ +### _[The Tools of Collaborative Development](https://docs.google.com/document/d/15LZsLTD7U1DOMKtTcS0MO9-JzQov3KUL_KD8OIex4bI/edit?usp=sharing)_ + +--- + +class: middle, center + +# Setting Group Norms + +--- + +class: middle + +## What are Group Norms? + +- A list of guidelines for your group’s collaboration. + +- An expression of your group’s beliefs and character. + +- Expressions of intent, not of specific behavior. + +- A living document - they should evolve with your group. + +--- + +class: middle + +## Why are Group Norms important? + +- Writing them is a solid team building exercise. + +- They encourage explicit communication about expectations. + +- They can serve as a point of stability when disagreements arise. + +- They can help onboard new members to your group. + +--- + +class: middle, center + +## Zone of Proximal Development (_ZPD_) + +zone of proximal development + +### _Let the ZPD guide your norms!_ + +--- + +class: middle + +## ZPD: _norms that support learning_ + +zone of proximal development + +- You have of two separate ZPDs as you learn to program + - The **difficulty of challenges** you solve + - The **development process** you use to solve challenges + +- Focus on your **development process**, not hard challenges + - Repeat the _entire process_ with _good practices_ and easy challenges + - Not fewer times with harder challenges with bad practices + +- Focus on coding challenges in your _can do now_ zone + +--- + +class: middle, center + +## Defining Norms: _Group Exercise_ + +
+
+ +### _[Defining Group Norms Guide](https://docs.google.com/document/d/1RaPP8CWzTwvniiuXpTnnnSohWCHx5M4mm-ST24aPYBk/edit?usp=sharing)_ + +--- + +class: middle, center + +## The Repository: _a walk-through_ + +### [`ET6-practice-code-review`](https://github.com/MIT-Emerging-Talent/ET6-practice-code-review) + +--- + +class: middle + +## Next Steps: _small or large groups?_ + +_Time for a vote! Give a 👍 to your preference in the Chat_ + +- ## 🐘 -> fewer larger groups + +- ## 🐁 -> more smaller groups + +--- + +class: middle + +## Next Steps: _norms, workflows, repo_ + +- We will create a public channel for each group on Slack + +- We will share the group exercise docs: **workflows study** & **group norms** + +- You will have a couple days to complete these exercises + +- We will add you as collaborators in your group repositories + +- You will set up your repositories according to the `/collaboration/guide` + +- Let the coding begin! + +--- + +class: middle, center + +## Discussion + Q & A + +--- + +class: middle, center + +# Thank You + +
+ +Emerging Talent Logo + +--- diff --git a/7_code_review/prep_work.md b/7_code_review/prep_work.md index 9b00f56..2d89a1c 100644 --- a/7_code_review/prep_work.md +++ b/7_code_review/prep_work.md @@ -1 +1,9 @@ # Prep Work + +Take a breather, there's nothing technical in this workshop! We'll discuss collaborative development, introduce the group deliverable, and sooth your Python anxiety. + +To prepare, you can look through a couple resources from these suggested study topics. You don't need to go in depth, it's enough to be familiar with the terms: + +- [Group Norms](../suggested_study/group_norms.md) +- [Pair Programming](../suggested_study/pair_programming.md) +- [Open Source](../suggested_study/open_source.md) diff --git a/README.md b/README.md index 351b087..d8cff43 100644 --- a/README.md +++ b/README.md @@ -12,4 +12,5 @@ at Emerging Talent. - _Count how many times each line is executed_: `$ python -m trace -c path/to/file.py` - **Run a file with Unit Tests**: - `$ python -m unittest -c path/to/tests/test_file.py` + - _as a script_:`$ python -m unittest path/to/tests/test_file.py` + - _as a module_:`$ python -m unittest path.to.tests.test_file` diff --git a/suggested_study/README.md b/suggested_study/README.md index 1404be4..6de9ba0 100644 --- a/suggested_study/README.md +++ b/suggested_study/README.md @@ -80,7 +80,7 @@ know something we're missing, send a Pull Request! All languages are welcome. - [deterministic.space](https://deterministic.space/readme-driven-development.html) - [tom preston werner](https://tom.preston-werner.com/2010/08/23/readme-driven-development.html) -## Missing +## Missing Semester > _Chinese (Simplified), Chinese (Traditional), Japanese, Korean, Portuguese, > Russian, Serbian, Spanish, Turkish, Vietnamese, Arabic, Italian, Persian, diff --git a/suggested_study/code_review.md b/suggested_study/code_review.md new file mode 100644 index 0000000..3c7fba3 --- /dev/null +++ b/suggested_study/code_review.md @@ -0,0 +1,32 @@ +# Code Review + +- What? Why? [Wikipedia](https://en.wikipedia.org/wiki/Code_review), [Alex](https://dzone.com/articles/what-is-code-review-and-why-do-you-need-it) +- [How to do code reviews like a human](https://www.youtube.com/watch?v=0t4_MfHgb_A) +- [The science of code reviews](https://www.youtube.com/watch?v=EyL7mqwpZhk) +- [Code review on GitHub](https://www.youtube.com/watch?v=HW0RPaJqm4g) +- [An example code review](https://www.youtube.com/watch?v=cix7wQSsN7U) +- [all-about-code-review](https://github.com/mgreiler/all-about-code-review) +- [How to review someone else's code](https://www.youtube.com/watch?v=0t4_MfHgb_A) +- [Python Code Review: Unplugged](https://www.youtube.com/playlist?list=PLP8GkvaIxJP2kFnZE14YKDNtzw9gTB0lK) +- [All About Code Review](https://github.com/mgreiler/all-about-code-review) +- [Pair Programming vs. Code Review](https://blog.codinghorror.com/pair-programming-vs-code-reviews/) + +- [Building Software Together](https://buildtogether.tech/) _a student's guide + to being a compassionate programmer_ - The technical parts are more advanced + than what you're learning now, but all the rest is gold. + +## Code Review on GitHub + +- [Adding collaborators to a repository](https://www.youtube.com/watch?v=p49LRx3hYI8) +- [about code reviews](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/about-pull-request-reviews) +- [requesting a code review](https://help.github.com/en/github/collaborating-with-issues-and-pull-requests/requesting-a-pull-request-review) +- [prevent pushing to `main`](https://stackoverflow.com/a/57685576) +- [Git Workflow for 2](https://github.com/hackyourfuturebelgium/git-workflow-workshop-for-two) +- [Pull Requests](https://www.youtube.com/watch?v=2M16faxEQsg) +- [Git & GitHub for Poets](https://www.youtube.com/watch?v=BCQHnlnPusY&list=PLRqwX-V7Uu6ZF9C0YMKuns9sLDzK6zoiV) +- The Net Ninja: + [11](https://www.youtube.com/watch?v=MnUd31TvBoU&list=PL4cUxeGkcC9goXbgTDQ0n_4TBzOO0ocPR&index=11) +- linking PRs to Issues: + [reference 1](https://help.github.com/en/github/managing-your-work-on-github/linking-a-pull-request-to-an-issue), + [reference 2](https://help.github.com/articles/autolinked-references-and-urls/) +- [closing Issues using keywords](https://help.github.com/en/enterprise/2.16/user/github/managing-your-work-on-github/closing-issues-using-keywords) diff --git a/suggested_study/group_norms.md b/suggested_study/group_norms.md new file mode 100644 index 0000000..d96943a --- /dev/null +++ b/suggested_study/group_norms.md @@ -0,0 +1,12 @@ + +# Group Norms + +- [What is Culture?](https://whatisculture.org/) - This site is designed to help you improve your understanding of culture and the impact it has on the way people think, behave, and interact. +- [How can you establish group norms and expectations for a more inclusive team?](https://www.linkedin.com/advice/3/how-can-you-establish-group-norms-expectations#co-create-your-group-norms-and-expectations) - Group norms and expectations are the shared rules and standards that guide the behavior and interactions of a team. They can help create a more inclusive, collaborative, and productive team culture, especially when working with diverse and remote members. However, establishing group norms and expectations is not a one-time event. It requires ongoing communication, feedback, and adaptation. Here are some tips on how to do it effectively. +- [On setting group norms](https://publichealth.berkeley.edu/wp-content/uploads/2020/01/On_Setting_Group_Norms.pdf) - Every group develops its own customs, habits and expectations for how things will be done. These patterns and expectations, or group norms as they’re sometimes called, influence the ways team members communicate with each other. +- [Tips to create group norms for high-performance teams, with examples from 7 Asana managers](https://asana.com/resources/group-norms-examples) - Group norms are usually implied rather than defined, so you may have never thought of them before. By intentionally creating group norms, you can empower team collaboration, increase efficiency, and maximize effectiveness. +Examples +- [Injunctive Norms: Definition And 10 Examples](https://helpfulprofessor.com/injunctive-norms/) +- [Seven Norms of Collaboration: A Supporting Toolkit](https://arbss.org/wp-content/uploads/2020/10/Toolkit-for-Establishing-Norms-for-Team-Members-1.pdf) +- [Your 9-Step Guide for Smooth Remote Team Communication](https://relevant.software/blog/strategies-to-ensure-effective-communication-for-remote-teams/#2_Creating_an_Online_Office_Culture) - This isn’t just another guide to remote team communication; it’s your roadmap to making the world seem a little smaller and your remote development team a little tighter. +- [The Differences between Dialogue and Debate](https://capstone.unst.pdx.edu/sites/default/files/Dialogue%20and%20Debate_0.pdf) - A short and wonderful PDF describing practical differences between debate & dialogue. It also suggests behaviors that support dialogue, and related competencies. diff --git a/suggested_study/pair_programming.md b/suggested_study/pair_programming.md new file mode 100644 index 0000000..a3c3360 --- /dev/null +++ b/suggested_study/pair_programming.md @@ -0,0 +1,7 @@ +# Pair Programming + +- [Pair Programming Anti Patterns](https://www.youtube.com/watch?v=McZ131y0OYU) +- [Pair Programming Best-Practices](https://www.youtube.com/watch?v=E4cg5mmvpwo) +- [Tuple's Pair Programming Guide](https://tuple.app/pair-programming-guide/) +- [Pair Programming Roles](https://gist.github.com/healeycodes/5acc53131957f6a96a281c89890c7706) +- [Pair Programming vs. Code Review](https://blog.codinghorror.com/pair-programming-vs-code-reviews/) diff --git a/suggested_study/python.md b/suggested_study/python.md index 0dc0dd3..232f9ed 100644 --- a/suggested_study/python.md +++ b/suggested_study/python.md @@ -68,6 +68,7 @@ - [LearnPython](https://www.learnpython.org/): An interactive online tutorial. - [coddy.tech](https://coddy.tech): An interactive online tutorial, mobile-friendly. - [Introduction to Scripting in Python Specialization](https://www.coursera.org/specializations/introduction-scripting-in-python): This specialization is intended for beginners who would like to master essential programming skills. +- [Python Full Course 2024 (Bro Code)](https://www.youtube.com/watch?v=ix9cRaBkVe0) - _12 hours?!_ ## References