From 96a78c2231cd096699415c05ee14df646dde97e4 Mon Sep 17 00:00:00 2001 From: Tjebbee <33282467+Tjebbee@users.noreply.github.com> Date: Thu, 28 Nov 2019 13:47:25 +0100 Subject: [PATCH 01/30] Update LESSONPLAN.md --- Week2/LESSONPLAN.md | 49 ++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/Week2/LESSONPLAN.md b/Week2/LESSONPLAN.md index ebe0a6342..9cc4af7cd 100644 --- a/Week2/LESSONPLAN.md +++ b/Week2/LESSONPLAN.md @@ -13,29 +13,29 @@ The purpose of this class is to introduce to the student: FIRST HALF (12.00 - 13.30) -### 1. Q&A about last week's concepts & homework +## 1. Q&A about last week's concepts & homework (Add more content) -### 2. The difference between statements & expressions -##### Explanation +## 2. The difference between statements & expressions +### Explanation An expression is a piece of code that resolves in a value (becomes a value) A statement is an instruction -##### Example +### Example -###### Expressions +#### Expressions * `sum(a, b)` * `a` * `a > 4 ? "yes" : "no"` * `a + b` * `a && b || c` -###### statements +#### statements * `let x;` * `if (a > 4) { return "yes"; } else { return "no"; }` -##### Exercise +### Exercise -###### 15. Indicate for each of these whether it is an expression or a statement: +#### Indicate for each of these whether it is an expression or a statement: 1. `l` 2. `l = 4;` @@ -47,7 +47,7 @@ A statement is an instruction 8. `function a() { return 4; }` 9. `let a = function () { return 4; }` -###### Given the following code: +#### Given the following code: ```js let s = "Hello".toLowerCase(); @@ -73,14 +73,14 @@ if (s2 == s1) { List all 11 *statements* in the code above List all 28 *expressions* in the code above (BONUS!) -##### Essence +### Essence It's important to know the difference between expressions and statement because: 1. It will give you an overview on what the code is about (is it an instruction or is code that resolves in a value) 2. While writing code you'll not mix up the two and therefore make sure that you do not write wrong code. -### 3. What are operators (comparison, arithmetic, logical, assignment) -##### Explanation +## 3. What are operators (comparison, arithmetic, logical, assignment) +### Explanation An operator is capable of manipulating a certain value or operand. Operators are used to perform specific mathematical and logical computations on operands. In other words, we can say that an operator operates the operands. In JavaScript operators are used for compare values, perform arithmetic operations etc. There are various operators supported by JavaScript: * Arithmetic Operators @@ -100,11 +100,11 @@ An operator is capable of manipulating a certain value or operand. Operators are assigns a value to its left operand based on the value of its right operand. The simple assignment operator is equal '=' (https://www.geeksforgeeks.org/javascript-operators/) -##### Example +### Example https://www.tutorialsteacher.com/javascript/javascript-operators -##### Exercise +### Exercise See example -##### Essence +### Essence Operators are very important in a programming language, because this is how we manipulate values. In fact, operators are the buildingblocks of all possible actions. @@ -112,23 +112,22 @@ In fact, operators are the buildingblocks of all possible actions. SECOND HALF (14.00 - 16.00) -### 4. What are loops (do/while & for loop) -##### Explanation +## 4. What are loops (do/while & for loop) +### Explanation Programming loops are about doing the same thing over and over again. Another term for that is: iteration Wikipedia: In most computer programming languages, a while loop is a (control flow) statement that allows (a block of) code to be executed repeatedly based on a given Boolean condition. -##### Example -*images* -##### Exercise +### Example +### Exercise Make a for loop with a do-while loop -##### Essence +### Essence In programming you have to do a lot of (alomst) similar calculations over and over again. Using loops makes it iesier (and less boring) to code. Next to that it makes sure the the code is much more compact. You can check: https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Looping_code as well. underneath the paragraph: 'Why bother' 5. What are conditional statements (if/else & switch) -##### Explanation +### Explanation The normal order of execution of statements in a computer program is in straight-line order, from top to bottom. However, sometimes it is desirable to execute one or more statements conditionally, i.e. depending on whether some condition – determined by the state of your program – holds true (Boolean expression). In its simplest form the `if` statement looks like this: @@ -153,7 +152,7 @@ if() { The switch statement can sometimes be a useful alternative to a concatenation of if statements. This is the case when the condition is an expression that can be decomposed into a number of distinct values or cases, as shown in the example below. -##### Example +### Example ```js if (distance < 10) { console.log('I will take the bike.'); @@ -161,9 +160,9 @@ if (distance < 10) { ``` -##### Exercise +### Exercise https://developer.mozilla.org/nl/docs/Web/JavaScript/Reference/Statements/if...else -##### Essence +### Essence From a2e202f8cc850a82132a5905f1546fb9cff4fdd1 Mon Sep 17 00:00:00 2001 From: Tjebbee <33282467+Tjebbee@users.noreply.github.com> Date: Thu, 28 Nov 2019 13:54:43 +0100 Subject: [PATCH 02/30] Update LESSONPLAN.md --- Week2/LESSONPLAN.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/Week2/LESSONPLAN.md b/Week2/LESSONPLAN.md index 9cc4af7cd..22cb645ff 100644 --- a/Week2/LESSONPLAN.md +++ b/Week2/LESSONPLAN.md @@ -14,7 +14,13 @@ The purpose of this class is to introduce to the student: FIRST HALF (12.00 - 13.30) ## 1. Q&A about last week's concepts & homework -(Add more content) +### Explanation +- static vs. dynamic +- Variables in JavaScript: `var`, `let`, `const`, declaration, initialization, assignment +- Basic Data Types in JavaScript: `number`, `string`, `boolean`, `undefined`, `null` +- Compound Data Types in JavaScript: `array`, `object` +### Exercise +Let the students explain the concepts themselves. ## 2. The difference between statements & expressions ### Explanation From e4ce648214ae9eaeb9bfff1bd0b45250d9f9c51f Mon Sep 17 00:00:00 2001 From: Tjebbee <33282467+Tjebbee@users.noreply.github.com> Date: Thu, 28 Nov 2019 14:03:00 +0100 Subject: [PATCH 03/30] Update LESSONPLAN.md --- Week2/LESSONPLAN.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Week2/LESSONPLAN.md b/Week2/LESSONPLAN.md index 22cb645ff..0a337402e 100644 --- a/Week2/LESSONPLAN.md +++ b/Week2/LESSONPLAN.md @@ -132,7 +132,7 @@ In programming you have to do a lot of (alomst) similar calculations over and ov You can check: https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Looping_code as well. underneath the paragraph: 'Why bother' -5. What are conditional statements (if/else & switch) +## 5. What are conditional statements (if/else & switch) ### Explanation The normal order of execution of statements in a computer program is in straight-line order, from top to bottom. However, sometimes it is desirable to execute one or more statements conditionally, i.e. depending on whether some condition – determined by the state of your program – holds true (Boolean expression). From 3d2b465f1a0c2d05baa265b86415572325e8fdbd Mon Sep 17 00:00:00 2001 From: Tjebbee <33282467+Tjebbee@users.noreply.github.com> Date: Thu, 28 Nov 2019 14:11:59 +0100 Subject: [PATCH 04/30] Update LESSONPLAN.md --- Week2/LESSONPLAN.md | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/Week2/LESSONPLAN.md b/Week2/LESSONPLAN.md index 0a337402e..0f8493e9e 100644 --- a/Week2/LESSONPLAN.md +++ b/Week2/LESSONPLAN.md @@ -157,6 +157,9 @@ if() { ``` The switch statement can sometimes be a useful alternative to a concatenation of if statements. This is the case when the condition is an expression that can be decomposed into a number of distinct values or cases, as shown in the example below. +Depending on the value of the expression specified in the `switch` clause, one of the `case` statement blocks is executed. Each statement block should end with a `break` statement to ensure that a `case` doesn't 'fall through' into the next `case`. + +The `default` statement at the end is executed when none of the preceding cases hold true. The `default` statement is not strictly required, but is a best practice to always specify one. ### Example ```js @@ -165,6 +168,40 @@ if (distance < 10) { } ``` +```js +const hyfModule = 'JavaScript-1'; + +switch (hyfModule) { + case 'HTML/CSS': + console.log('In this module you will learn HTML and CSS.'); + break; + case 'JavaScript-1': + console.log('In this module you will learn Git and JavaScript basics.'); + break; + case 'JavaScript-2': + console.log('In this module you will learn about JavaScript in the browser with HTML and CSS.'); + break; + case 'JavaScript-3': + console.log('In this module you will learn about Async and API calls.'); + break; + case 'Node': + console.log('This module is about building server and CLI applications using Node.'); + break; + case 'Database': + console.log('In this module is about Relational and Non-Relational Data and Database Systems.'); + break; + case 'React': + console.log('In this module you will to build Single Page Applications using React.'); + break; + case 'Project': + console.log('In this final module you will do your graduation project.'); + break; + default: + console.log('This module is unknown: ' + hyfModule); +}} +``` + + ### Exercise https://developer.mozilla.org/nl/docs/Web/JavaScript/Reference/Statements/if...else From 2155cb25d36dd1de05853753f75666c77e21f58c Mon Sep 17 00:00:00 2001 From: Tjebbee <33282467+Tjebbee@users.noreply.github.com> Date: Thu, 28 Nov 2019 15:33:37 +0100 Subject: [PATCH 05/30] Update README.md hyperlink lessonplan --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c0e9e63a7..dbf980860 100644 --- a/README.md +++ b/README.md @@ -65,7 +65,7 @@ If you have any questions or if something is not entirely clear ¯\\\_(ツ)\_/¯ | ---- | --------------------------------------------------------------------------------- | ------------------------------ | ------------------------------- | -------------------------------------- | | 1. | What is JavaScript?, Variables, Data Structures & Naming Conventions | [Reading W1](/Week1/README.md) | [Homework W1](/Week1/MAKEME.md) | [Lesson Plan W1](/Week1/LESSONPLAN.md) | | 2. | Statements vs. Expressions, Control flow, Loops, Operators, Conditional statement | [Reading W2](/Week2/README.md) | [Homework W2](/Week2/MAKEME.md) | [Lesson Plan W2](/Week1/LESSONPLAN.md) | -| 3. | Functions, Thinking like a programmer I, How JavaScript relates to HTML/CSS | [Reading W3](/Week3/README.md) | [Homework W3](/Week3/MAKEME.md) | [Lesson Plan W3](/Week1/LESSONPLAN.md) | +| 3. | Functions, Thinking like a programmer I, How JavaScript relates to HTML/CSS | [Reading W3](/Week3/README.md) | [Homework W3](/Week3/MAKEME.md) | [Lesson Plan W3](/Week3/LESSONPLAN.md) | ## Finished? From 6040b1ae56be1e964478e77255acca40e2f27b94 Mon Sep 17 00:00:00 2001 From: Wilgert Velinga Date: Sun, 24 Nov 2019 10:32:21 +0100 Subject: [PATCH 06/30] add exercises to part 2 --- .gitignore | 1 + Week1/LESSONPLAN.md | 110 ++++++++++++++++++++++++++++++++------------ 2 files changed, 81 insertions(+), 30 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..723ef36f4 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.idea \ No newline at end of file diff --git a/Week1/LESSONPLAN.md b/Week1/LESSONPLAN.md index f8beb0910..c083baa28 100644 --- a/Week1/LESSONPLAN.md +++ b/Week1/LESSONPLAN.md @@ -13,13 +13,13 @@ The purpose of this class is to introduce to the student: ## Core concepts -*FIRST HALF (12.00 - 13.30)* +_FIRST HALF (12.00 - 13.30)_ ## 1. The 2 types of websites: static vs. dynamic ### Explanation -Static websites usually come with a fixed number of pages that have a specific layout. When the page runs on a browser, the content is literally static and doesn’t change in response to user actions. A static website is usually created with HTML and CSS +Static websites usually come with a fixed number of pages that have a specific layout. When the page runs on a browser, the content is literally static and doesn’t change in response to user actions. A static website is usually created with HTML and CSS Compared to static websites, which are purely informational, a dynamic website is more functional. It allows users to interact with the information that is listed on the page. Of course, that requires utilizing more than just HTML code. ### Example @@ -45,23 +45,31 @@ Discuss in class which claim belongs to which type of website: Feature of Content Management System. HTML, CSS, Javascript is used for developing the website. Same content is delivered everytime the page is loaded. - + +<<<<<<< HEAD + ### Essence +======= + +##### Essence + +> > > > > > > add exercises to part 2 + [In the link is an article with (dis)advantages of both static and dynamic websites.](https://www.spiderwriting.co.uk/static-dynamic.php) - - Static: + + Static: Advantage: - Flexible - Cheaper Disadvantages: - not updating content - Scalability - + Dynamic: Advantage: - - Easy to pull in data on stuctured and organised way - - Content management system + - Easy to pull in data on stuctured and organised way + - Content management system Disadvantage: - Design is more fixed, becasue the pages are more of a template - Costs @@ -104,9 +112,16 @@ It doesn't exhibit any dynamic behaviour like: 1. rendering complex animations 1. sending requests over network to servers and fetching a response 1. and this is where JavaScript steps in. - + <<<<<<< HEAD + ## 3. What are variables (const & let) & naming conventions +======= + +#### 3. What are variables (const & let) & naming conventions + +> > > > > > > add exercises to part 2 + ### Explanation In JavaScript, there are three ways of creating variables. @@ -127,6 +142,7 @@ Three different stages of working with variables are: - Variable assignment means throwing away the old value of a variable and replacing it with a new one. Initialization can be thought of as a special way of assignment. https://github.com/HackYourFuture/fundamentals/blob/master/fundamentals/variables.md + ### Example ```javascript @@ -169,12 +185,13 @@ console.log(lastName); ### Exercise 1. Create 2 variables using the `let` keyword - 1. make 1 variable contain your first name - 1. the second variable should have no value assigned - + + 1. make 1 variable contain your first name + 1. the second variable should have no value assigned + 1. Make 2 variables using the `const` keyword - 1. the first variable should contain the city you currently stay at - 1. come up with a value for the second variable yourself + 1. the first variable should contain the town/city you currently stay at + 1. come up with a value for the second variable yourself ### Essence @@ -184,14 +201,16 @@ For example, your name and age are simple pieces of information, a string and a Variables are simply named storage/pointer for this information. -*SECOND HALF (14.00 - 16.00)* +_SECOND HALF (14.00 - 16.00)_ ## 4. The basic data types (string, boolean, number, undefined, null) ### Explanation -Primitive data types are typically types that are built-in or basic to a language implementation. -There are 5 different types of data. The compiler/computer interpretates all the variables we make as one of those datatypes. +> > > > > > > add exercises to part 2 +> > > > > > > Primitive data types are typically types that are built-in or basic to a language implementation. + +There are 5 different types of data. The compiler/computer interprets all the variables we make as one of those datatypes. (https://javascript.info/types) Boolean — true or false @@ -200,40 +219,71 @@ Undefined — a declared variable but hasn’t been given a value Number — integers, floats, etc String — an array of characters i.e words ?? Symbol — a unique value that's not equal to any other value ?? + ### Example -* `string`, e.g. "HackYourFuture" -* `number`, e.g. 5, or 10.6 -* `boolean`, e.g. `true` or `false` -* `array`\*, e.g. `[1, 2, 3]` or `['what', 'is', 'your', 'name']` -* `null and undefined` The values `null` and `undefined` are very similar in JavaScript, but they behave a bit differently. The difference is that `null` always has type "object", and `undefined` always has type "undefined". -Whenever you declare a variable, but you don't set a value, the variable will become `undefined`. JavaScript will never make a variable `null` unless you explicitly program it. -* `symbol` +- `string`, e.g. "HackYourFuture" +- `number`, e.g. 5, or 10.6 +- `boolean`, e.g. `true` or `false` +- `array`\*, e.g. `[1, 2, 3]` or `['what', 'is', 'your', 'name']` +- `null` +- `undefined` + The values `null` and `undefined` are very similar in JavaScript, but they behave a bit differently. The difference is that `null` always has type "object", and `undefined` always has type "undefined". +Whenever you declare a variable (using `let`), but you don't set a value, the variable will become `undefined`. JavaScript will never make a variable `null` unless you explicitly program it. + +- `symbol` ```js let x = 5; let typeOfX = typeof x; // -> "number" ``` - ### Exercise -Everybody has two minutes to find a way to declare all basic data types by making use of the typeof operator: + +Everybody has two minutes to find a way to declare all basic data types by making use of the typeof operator: + ```js let x = 5; let typeOfX = typeof x; // -> "number" ``` -### Essence -In this way we can store a lot of data in a compact way, while the computer/compiler knows how to interpretate the 1's and 0's/ + +##### Essence + +In this way we can store a lot of data in a compact way, while the computer/compiler knows how to interpret the 1's and 0's/ ## 5. The compound data types (object, array) ### Explanation +- Object key / value +- Array numeric key value +- Array ordered +- Object not ordered + ### Example -* `array`\*, e.g. `[1, 2, 3]` or `['what', 'is', 'your', 'name']` -* `object`, e.g. `{name: 'John', age: 24}`, or the special object `null` + +- `array`\*, e.g. `[1, 2, 3]` or `['what', 'is', 'your', 'name']` +- `object`, e.g. `{name: 'John', age: 24}`, or the special object `null` + ### Exercise + +1. Create a list of your favorite types of food/dishes like this: + +```js +['Chocolate', 'Risotto', 'Tuna melt']; +``` + +2. Create an object that contains the properties of your town/city like this: + +```js +{ + name: 'Huizen', + province: 'Noord-Holland', + citizens: 50000 +} +``` + ### Essence _Special thanks to Jim Cramer, Yash Kapila, David Nudge for most of the content_ From 5f89a8b44ba1a7221e36a26b02669cbd412b01ef Mon Sep 17 00:00:00 2001 From: Wilgert Velinga Date: Sat, 30 Nov 2019 17:10:48 +0100 Subject: [PATCH 07/30] improve lessonplan week1 --- Week1/LESSONPLAN.md | 114 ++++++++++++++++++++++++-------------------- 1 file changed, 61 insertions(+), 53 deletions(-) diff --git a/Week1/LESSONPLAN.md b/Week1/LESSONPLAN.md index c083baa28..54f533450 100644 --- a/Week1/LESSONPLAN.md +++ b/Week1/LESSONPLAN.md @@ -6,6 +6,7 @@ The purpose of this class is to introduce to the student: - The 2 types of websites: static vs. dynamic - The pillars of web development: HTML/CSS/JavaScript + - where JavaScript can run: Browser / Node - What are variables - How to name variables properly - What are the basic data types @@ -34,27 +35,43 @@ Examples the two different kind of websites Discuss in class which claim belongs to which type of website: Content of Web pages can not be change at runtime. + + Server side languages such as PHP, Node.js are used. + + Content of Web pages can be changed. - No interation with database possible. - Interaction with database is possible - It is faster to load as compared to the other typ of website. + + + No interaction with database possible. + + + Interaction with database is + + + It is faster to load as compared to the other type of website. + + It is slower then static website. + + + Lower Development costs. + + + Content may change everytime the page is loaded. + + Feature of Content Management System. - HTML, CSS, Javascript is used for developing the website. - Same content is delivered everytime the page is loaded. -<<<<<<< HEAD -### Essence + HTML, CSS, Javascript is used for developing the website. -======= -##### Essence + Same content is delivered everytime the page is loaded. -> > > > > > > add exercises to part 2 +### Essence [In the link is an article with (dis)advantages of both static and dynamic websites.](https://www.spiderwriting.co.uk/static-dynamic.php) @@ -81,6 +98,9 @@ Discuss in class which claim belongs to which type of website: - HTML defines what the content is. - CSS defines the appearance of the page. - JavaScript defines behavior of the page. +- Where can JavaScript run: + - browser + - Node ### Example @@ -88,6 +108,7 @@ Discuss in class which claim belongs to which type of website: ### Exercise +Let students fork and then clone the repository. Let students create a classwork directory and create an index.html along with an app.js. Script tag should be added to the end of body tag(reason for doing so is part of JS2 Week1). The end result should look like: @@ -106,7 +127,7 @@ These static pages can interact with a visitor only through the use of forms. On A big disadvantage of web pages like this is that the only way that a visitor has of interacting with the page is by filling out the form and waiting for a new page to load. -It doesn't exhibit any dynamic behaviour like: +It doesn't exhibit any dynamic behavior like: 1. reacting to user actions such as mouse click events or key presses. 1. rendering complex animations @@ -116,12 +137,6 @@ It doesn't exhibit any dynamic behaviour like: ## 3. What are variables (const & let) & naming conventions -======= - -#### 3. What are variables (const & let) & naming conventions - -> > > > > > > add exercises to part 2 - ### Explanation In JavaScript, there are three ways of creating variables. @@ -158,8 +173,8 @@ console.log(age); ```javascript // Variable Initialization -var firstName = 'Yash'; -let lastName = 'Kapila'; +var firstName = 'Marco'; +let lastName = 'Borsato'; const age = 29; console.log(firstName); @@ -174,9 +189,9 @@ let lastName = 'Hanks'; console.log(firstName); console.log(lastName); -// Assigning variables to a different value -firstName = 'Hanks'; -lastName = 'Tom'; +// Assigning a different value to variables +firstName = 'Katy'; +lastName = 'Perry'; console.log(firstName); console.log(lastName); @@ -191,7 +206,7 @@ console.log(lastName); 1. Make 2 variables using the `const` keyword 1. the first variable should contain the town/city you currently stay at - 1. come up with a value for the second variable yourself + 1. come up with name and a value for the second variable yourself ### Essence @@ -207,48 +222,38 @@ _SECOND HALF (14.00 - 16.00)_ ### Explanation -> > > > > > > add exercises to part 2 -> > > > > > > Primitive data types are typically types that are built-in or basic to a language implementation. - -There are 5 different types of data. The compiler/computer interprets all the variables we make as one of those datatypes. -(https://javascript.info/types) +In JavaScript, a primitive (primitive value, primitive data type) is data that is not an object and has no methods. There are 7 primitive data types: `string`, `number`, `bigint`, `boolean`, `null`, `undefined`, and `symbol`. Boolean — true or false Null — no value Undefined — a declared variable but hasn’t been given a value Number — integers, floats, etc String — an array of characters i.e words -?? Symbol — a unique value that's not equal to any other value ?? +Symbol — a unique value that's not equal to any other value (not used during HYF) ### Example - `string`, e.g. "HackYourFuture" - `number`, e.g. 5, or 10.6 - `boolean`, e.g. `true` or `false` -- `array`\*, e.g. `[1, 2, 3]` or `['what', 'is', 'your', 'name']` -- `null` -- `undefined` - The values `null` and `undefined` are very similar in JavaScript, but they behave a bit differently. The difference is that `null` always has type "object", and `undefined` always has type "undefined". +- `array`, e.g. `[1, 2, 3]` or `['what', 'is', 'your', 'name']` +- `null` \* +- `undefined` \* +- `symbol` e.g. `new Symbol('example')` +\* The values `null` and `undefined` are very similar in JavaScript, but they behave a bit differently. The difference is that `null` always has type "object", and `undefined` always has type "undefined". Whenever you declare a variable (using `let`), but you don't set a value, the variable will become `undefined`. JavaScript will never make a variable `null` unless you explicitly program it. -- `symbol` - -```js -let x = 5; -let typeOfX = typeof x; // -> "number" -``` - ### Exercise -Everybody has two minutes to find a way to declare all basic data types by making use of the typeof operator: +Everybody has four minutes to find a way to store all basic data types in a variable by making use of the typeof operator: ```js let x = 5; let typeOfX = typeof x; // -> "number" ``` -##### Essence +### Essence In this way we can store a lot of data in a compact way, while the computer/compiler knows how to interpret the 1's and 0's/ @@ -256,34 +261,37 @@ In this way we can store a lot of data in a compact way, while the computer/comp ### Explanation -- Object key / value -- Array numeric key value -- Array ordered -- Object not ordered +Pieces of information often form a group. For example the names of all the students in this class can be grouped together +as a list. In JavaScript lists are stored in a datatype called an `Array`. + +Another way pieces of information can form a group are multiple properties of the same thing. For example the dimensions +of this room: length, width, height. These groups of information are stored in a datatype called an `Object`. ### Example -- `array`\*, e.g. `[1, 2, 3]` or `['what', 'is', 'your', 'name']` -- `object`, e.g. `{name: 'John', age: 24}`, or the special object `null` +- `array`\*, e.g. `[1, 2, 3]` or `['Gijs', 'Jim', 'Noer', 'Wouter']` +- `object`, e.g. `{name: 'Wilgert', shoeSize: 42}`, or the special object `null` ### Exercise 1. Create a list of your favorite types of food/dishes like this: ```js -['Chocolate', 'Risotto', 'Tuna melt']; +const foods = ['Chocolate', 'Risotto', 'Tuna melt']; ``` 2. Create an object that contains the properties of your town/city like this: ```js -{ +const city = { name: 'Huizen', province: 'Noord-Holland', - citizens: 50000 -} + population: 50000, + capital: false, +}; ``` ### Essence -_Special thanks to Jim Cramer, Yash Kapila, David Nudge for most of the content_ +- Object key: value +- Array numeric index: value From d300a101f4bdbf5260365ff6b001b02d0dd2843d Mon Sep 17 00:00:00 2001 From: Tjebbee <33282467+Tjebbee@users.noreply.github.com> Date: Mon, 2 Dec 2019 15:25:29 +0100 Subject: [PATCH 08/30] Update LESSONPLAN.md --- Week3/LESSONPLAN.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Week3/LESSONPLAN.md b/Week3/LESSONPLAN.md index c03c7d215..4752e2ca1 100644 --- a/Week3/LESSONPLAN.md +++ b/Week3/LESSONPLAN.md @@ -57,7 +57,7 @@ https://github.com/HackYourFuture/fundamentals/blob/master/fundamentals/function ### Example Same link as Explanation ### Exercise -https://github.com/yash-kapila/HYF-JS1-Week3/tree/master/src + ### Essence - __Reusability__: Functions can be grouped together to make a module (or library), and then modules can be imported into your application so you can build awesome apps! - __Abstraction__: Hide underlying details about how a piece of functionality works under the hood. You can change how things are implemented within the function without other programmers who use your function worrying aobut the exact details of how it was implemented. @@ -124,6 +124,7 @@ Same link as Explanation ### Explanation ### Example ### Exercise +https://github.com/yash-kapila/HYF-JS1-Week3/tree/master/src ### Essence _Special thanks to Jim Cramer, Yash Kapila, David Nudge for most of the content_ From 1597ced8c84e191ed1430d4a5f189518fe5eb02d Mon Sep 17 00:00:00 2001 From: Tjebbee <33282467+Tjebbee@users.noreply.github.com> Date: Mon, 2 Dec 2019 16:21:35 +0100 Subject: [PATCH 09/30] Update LESSONPLAN.md --- Week3/LESSONPLAN.md | 38 +++++++++++++++++--------------------- 1 file changed, 17 insertions(+), 21 deletions(-) diff --git a/Week3/LESSONPLAN.md b/Week3/LESSONPLAN.md index 4752e2ca1..50a1ce2f7 100644 --- a/Week3/LESSONPLAN.md +++ b/Week3/LESSONPLAN.md @@ -14,19 +14,9 @@ FIRST HALF (12.00 - 13.30) ## 1. Q&A about last week's concepts & homework -### Explanation -**Week 1** - -In Week 1 we learnt about how data is represented computer programs: - - Variables - Basic data types (`string`, `number`, etc) - Compound data types (`array`, `object`) - -**Week 2** - -In Week 2 we learnt about how to manipulate the flow of execution in computer programs: - - Branching constructs - `if..else` - Looping constructs @@ -34,17 +24,11 @@ In Week 2 we learnt about how to manipulate the flow of execution in computer pr - `for..of` - `for..in` - `do..while` - -We also learnt about more ways to work with data using operators: - - Operators (arithmetic, comparison, eg `+`, `*`, `&&`, `||`, etc). -### Example -### Exercise -Ask students to explain a concept or summerise the last lecture themselves -### Essence +Note: You can ask students to explain a concept or summerise the last lecture themselves -## 2. What is a function (ES5 only) +## 2. Function (ES5 only) ### Explanation Functions are a way to organize your code in to re-usable chunks. @@ -66,15 +50,27 @@ And the same link as Explanation SECOND HALF (14.00 - 16.00) -## 3. Wat is scope (global, functional, block) +## 3. Scope (global, functional, block) ### Explanation Scopes define the visiblity of declarations of variables and functions. -The top level outside all your functions is called the _global scope_. Values defined in the global scope are accessible from everywhere in the code. +The top level outside all your functions is called the _global scope_. Values defined in the global scope are accessible from everywhere in the code. Whereas, variables defined in local scope can only be accessed and altered inside the scope they were created. - `var` and `function` declarations are visible with function scope. -- `let` and `const` declarations are visible with block scope. +- `let` and `const` declarations are visible with block scope. A block can be seen as a set of statements enclosed in curly brackets({}). + +Global scope: + +- Can be a real useful tool or a nightmare. +- Useful in scenarios where we want to export JS modules, use third party libraries like jQuery etc. +- Big risk of causing namespace clashes with multiple variables with same name being created in different places. + +Local Scope: + +- Think of local scope as any new scope that is created within the global scope. +- Each function written in JavaScript creates a new local scope. +- Variables defined within a function aren't available outside it. They are created when a function starts and are _in a way_ destroyed/hidden when a function ends. https://github.com/HackYourFuture/fundamentals/blob/master/fundamentals/scope.md ### Example From 6eada8114acee80e2d77001eec3712de7de4116e Mon Sep 17 00:00:00 2001 From: Wilgert Velinga Date: Mon, 2 Dec 2019 21:31:27 +0100 Subject: [PATCH 10/30] improve week2 lessonplan --- Week2/LESSONPLAN.md | 169 ++++++++++++++++++++++++++++---------------- 1 file changed, 110 insertions(+), 59 deletions(-) diff --git a/Week2/LESSONPLAN.md b/Week2/LESSONPLAN.md index 0f8493e9e..25a10f1eb 100644 --- a/Week2/LESSONPLAN.md +++ b/Week2/LESSONPLAN.md @@ -11,34 +11,44 @@ The purpose of this class is to introduce to the student: ## Core concepts -FIRST HALF (12.00 - 13.30) +FIRST HALF (12.05 - 13.30) ## 1. Q&A about last week's concepts & homework + ### Explanation -- static vs. dynamic + +- static vs. dynamic websites - Variables in JavaScript: `var`, `let`, `const`, declaration, initialization, assignment - Basic Data Types in JavaScript: `number`, `string`, `boolean`, `undefined`, `null` - Compound Data Types in JavaScript: `array`, `object` + ### Exercise + Let the students explain the concepts themselves. ## 2. The difference between statements & expressions + ### Explanation -An expression is a piece of code that resolves in a value (becomes a value) + +An expression is a piece of code that resolves to a value (becomes a value) A statement is an instruction + ### Example #### Expressions -* `sum(a, b)` -* `a` -* `a > 4 ? "yes" : "no"` -* `a + b` -* `a && b || c` + +- `sum(a, b)` +- `a` +- `a > 4 ? "yes" : "no"` +- `a + b` +- `a && b || c` #### statements -* `let x;` -* `if (a > 4) { return "yes"; } else { return "no"; }` + +- `let x;` +- `if (a > 4) { console.log("larger than 4"); } else { console.log("not larger than 4"); }` + ### Exercise #### Indicate for each of these whether it is an expression or a statement: @@ -56,84 +66,106 @@ A statement is an instruction #### Given the following code: ```js -let s = "Hello".toLowerCase(); +let s = 'Hello'.toLowerCase(); let l = s.length; function sum(a, b) { return a + b; } -let max = function (a, b) { +let max = function(a, b) { return a > b ? a : b; -} +}; let s1 = sum(4, 5); let s2 = 4 + 5; if (s2 == s1) { - console.log("same"); + console.log('same'); } else { - console.log("not same"); + console.log('not same'); } ``` -List all 11 *statements* in the code above -List all 28 *expressions* in the code above (BONUS!) +List 5 statements from all 11 _statements_ in the code above + +List 5 expressions of all 28 _expressions_ in the code above (BONUS!) ### Essence + It's important to know the difference between expressions and statement because: - 1. It will give you an overview on what the code is about (is it an instruction or is code that resolves in a value) - 2. While writing code you'll not mix up the two and therefore make sure that you do not write wrong code. +1. It will give you an overview on what the code is about (is it an instruction or is code that resolves to a value) +2. While writing code you'll not mix up the two and therefore make sure that you do not write wrong code. ## 3. What are operators (comparison, arithmetic, logical, assignment) + ### Explanation -An operator is capable of manipulating a certain value or operand. Operators are used to perform specific mathematical and logical computations on operands. In other words, we can say that an operator operates the operands. In JavaScript operators are used for compare values, perform arithmetic operations etc. There are various operators supported by JavaScript: - -* Arithmetic Operators - take numerical values (either literals or variables) as their operands and return a single numerical value. -* Comparison Operators - Two diferent types of comparison operators; They will always return a logical value, -- Equality Operators - checks if the operands are 'the same' - diffference in '=' '==' '===' -- Relational Operators - checks if the specific relation between two operands is true or false - -* Logical Operators - Mostly 'comparing'boolean values, but it can be used with any type. - -* Assignment Operators -assigns a value to its left operand based on the value of its right operand. The simple assignment operator is equal '=' - -(https://www.geeksforgeeks.org/javascript-operators/) + +- Arithmetic Operators + - take numerical values (either literals or variables) as their operands and return a single numerical value. + - `19 + 13`, `126 / 3`, `397 % 71` +- Comparison Operators + - Two different types of comparison operators; They will always return a logical value, + - Equality Operators + - checks if the operands are 'the same' + - difference in '=' '==' '===' + - Relational Operators + - checks if the specific relation between two operands is true or false + - `>`, `<`, `<=`, `>=` + + +- Logical Operators + - Mostly 'comparing' boolean values, but it can be used with any type. + - `true || false`, `false && true`, `!true` + +- Assignment Operators + - assigns a value to its left operand based on the value of its right operand. The simple assignment operator is equal '=' + - `+=`, `-=`, `*=`, `/=` + +(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators) + ### Example + https://www.tutorialsteacher.com/javascript/javascript-operators + ### Exercise + See example -### Essence -Operators are very important in a programming language, because this is how we manipulate values. -In fact, operators are the buildingblocks of all possible actions. +### Essence +Operators are very important in a programming language, because this is how we manipulate values. +In fact, operators are the building blocks of all possible actions. SECOND HALF (14.00 - 16.00) ## 4. What are loops (do/while & for loop) + ### Explanation -Programming loops are about doing the same thing over and over again. Another term for that is: iteration + +Programming loops are about doing the same thing over and over again, without typing the code over and over again. Another term for that is: iteration Wikipedia: In most computer programming languages, a while loop is a (control flow) statement that allows (a block of) code to be executed repeatedly based on a given Boolean condition. ### Example + +```javascript +``` + ### Exercise + Make a for loop with a do-while loop + ### Essence -In programming you have to do a lot of (alomst) similar calculations over and over again. Using loops makes it iesier (and less boring) to code. Next to that it makes sure the the code is much more compact. + +In programming you have to do a lot of (almost) similar calculations over and over again. Using loops makes it easier (and less boring) to code. Next to that it makes sure the the code is much more compact. You can check: https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Building_blocks/Looping_code as well. underneath the paragraph: 'Why bother' ## 5. What are conditional statements (if/else & switch) + ### Explanation + The normal order of execution of statements in a computer program is in straight-line order, from top to bottom. However, sometimes it is desirable to execute one or more statements conditionally, i.e. depending on whether some condition – determined by the state of your program – holds true (Boolean expression). In its simplest form the `if` statement looks like this: @@ -143,69 +175,88 @@ if () { } ``` -Then we have: +Then we have: + ```js if() { } else { } ``` + At last we have: + ```js if() { } else if { } ``` -The switch statement can sometimes be a useful alternative to a concatenation of if statements. This is the case when the condition is an expression that can be decomposed into a number of distinct values or cases, as shown in the example below. +The switch statement can sometimes be a useful alternative to a long list of if statements. This is the case when the condition is an expression that can be decomposed into a number of distinct values or cases, as shown in the example below. Depending on the value of the expression specified in the `switch` clause, one of the `case` statement blocks is executed. Each statement block should end with a `break` statement to ensure that a `case` doesn't 'fall through' into the next `case`. The `default` statement at the end is executed when none of the preceding cases hold true. The `default` statement is not strictly required, but is a best practice to always specify one. ### Example + ```js if (distance < 10) { - console.log('I will take the bike.'); + console.log('I will take the bike.'); } ``` ```js const hyfModule = 'JavaScript-1'; +let message = ''; switch (hyfModule) { case 'HTML/CSS': - console.log('In this module you will learn HTML and CSS.'); + message = 'In this module you will learn HTML and CSS.'; break; case 'JavaScript-1': - console.log('In this module you will learn Git and JavaScript basics.'); + message = 'In this module you will learn Git and JavaScript basics.'; break; case 'JavaScript-2': - console.log('In this module you will learn about JavaScript in the browser with HTML and CSS.'); + message = 'In this module you will learn about JavaScript in the browser with HTML and CSS.'; break; case 'JavaScript-3': - console.log('In this module you will learn about Async and API calls.'); + message = 'In this module you will learn about Async and API calls.'; break; case 'Node': - console.log('This module is about building server and CLI applications using Node.'); + message = 'This module is about building server and CLI applications using Node.'; break; case 'Database': - console.log('In this module is about Relational and Non-Relational Data and Database Systems.'); + message = 'In this module is about Relational and Non-Relational Data and Database Systems.'; break; case 'React': - console.log('In this module you will to build Single Page Applications using React.'); + message = 'In this module you will to build Single Page Applications using React.'; break; case 'Project': - console.log('In this final module you will do your graduation project.'); + message = 'In this final module you will do your graduation project.'; break; default: - console.log('This module is unknown: ' + hyfModule); -}} + message = 'This module is unknown: ' + hyfModule; +} + +console.log(message); ``` +### Exercise +Create a Switch/Case that will log the season based on the month. -### Exercise -https://developer.mozilla.org/nl/docs/Web/JavaScript/Reference/Statements/if...else +```javascript +const month = 'January'; +let season = ''; +switch (month) { + case 'January': + season = 'winter'; + break; +} -### Essence +console.log(season); // 'winter' +``` +https://developer.mozilla.org/nl/docs/Web/JavaScript/Reference/Statements/if...else + +### Essence From e257822344d4c761ab3cdddf017ef2f3a9ea74b4 Mon Sep 17 00:00:00 2001 From: Wilgert Velinga Date: Mon, 2 Dec 2019 21:36:33 +0100 Subject: [PATCH 11/30] fix mistake in grade calculator project --- Week2/MAKEME.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Week2/MAKEME.md b/Week2/MAKEME.md index 9690a4c91..814988bfb 100644 --- a/Week2/MAKEME.md +++ b/Week2/MAKEME.md @@ -147,7 +147,7 @@ These are the requirements your project needs to fulfill: This is what the script is expected to return in the command line: ```markdown -You got a B (85%)! +You got a D (60%)! ``` Good luck! From bf5bca33000722c25cd7d7cede1e09657d876867 Mon Sep 17 00:00:00 2001 From: Noer Paanakker Date: Tue, 3 Dec 2019 10:57:57 +0100 Subject: [PATCH 12/30] clarified week 2 project description --- Week2/MAKEME.md | 20 ++++++++++---------- assets/.DS_Store | Bin 0 -> 6148 bytes assets/while-loop.jpg | Bin 0 -> 19517 bytes 3 files changed, 10 insertions(+), 10 deletions(-) create mode 100644 assets/.DS_Store create mode 100644 assets/while-loop.jpg diff --git a/Week2/MAKEME.md b/Week2/MAKEME.md index 9690a4c91..dce5a57c7 100644 --- a/Week2/MAKEME.md +++ b/Week2/MAKEME.md @@ -27,7 +27,7 @@ In this section you will be doing interactice exercises, that will allow you to Consider the following string: ```js -let myString = 'hello,this,is,a,difficult,to,read,sentence'; +let myString = "hello,this,is,a,difficult,to,read,sentence"; ``` 1. Add the variable to your file. @@ -82,7 +82,7 @@ You're at a party and you feel thirsty! However, you've got 5 friends who are al There are 3 different types of drinks: ```js -const drinkTypes = ['cola', 'lemonade', 'water']; +const drinkTypes = ["cola", "lemonade", "water"]; ``` 2. Create a loop that runs 5 times. On each iteration, push a drink into the `drinkTray` variable. The `drinkTray` can only hold at most two instances of the same drink type, for example it can only hold 2 colas, 2 lemonades, 2 waters. @@ -119,13 +119,19 @@ In order to speed up development you'll be using a CSS framework: [Bootstrap 4]( > Every week ends with a project you have to build on your own. Instead of getting clear-cut instructions, you'll get a list of criteria that your project needs to measure up to. -In this project you'll write a script that calculates grades, based on the American grading system! Let's say a student did a test and they got a 60 out of 100, this script will: +In this project you'll write a `function` that calculates grades, based on the American grading system! Let's say a student did a test and they got a 60 out of 100, this `function` will: 1. convert the score into a percentage 2. calculate what grade corresponds with that percentage, and 3. shows in the command line the result: the grade and the percentage -When writing the script, make use of the following grade scores: +In this example this is what we would expect the `function` to return in the command line: + +```markdown +You got a B (85%)! +``` + +When writing the `function`, make use of the following grade scores: ```markdown Grade A (90% - 100%) @@ -144,12 +150,6 @@ These are the requirements your project needs to fulfill: - Make the return value of the function a template string, so you can insert variables! - Use `node` from the command line to test if your code works as expected -This is what the script is expected to return in the command line: - -```markdown -You got a B (85%)! -``` - Good luck! ## **SUBMIT YOUR HOMEWORK!** diff --git a/assets/.DS_Store b/assets/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..5008ddfcf53c02e82d7eee2e57c38e5672ef89f6 GIT binary patch literal 6148 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 mjWAoPEwG$?RMEfy literal 0 HcmV?d00001 From 8632df4a130f9ed27397ce6b048331dd32f2a011 Mon Sep 17 00:00:00 2001 From: Noer Paanakker Date: Mon, 16 Dec 2019 15:06:42 +0100 Subject: [PATCH 13/30] adjusted hand in homework guide --- assets/new-pull-request.png | Bin 0 -> 75395 bytes hand-in-homework-guide.md | 16 ++++++---------- 2 files changed, 6 insertions(+), 10 deletions(-) create mode 100644 assets/new-pull-request.png diff --git a/assets/new-pull-request.png b/assets/new-pull-request.png new file mode 100644 index 0000000000000000000000000000000000000000..374766b1c088eec158c416cda54f6e58ba7e3691 GIT binary patch literal 75395 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%0A%xVW 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 z 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 ZFk^~-pTtZ2nx6n)vXTlCWny~1{|`ZmXSM(U literal 0 HcmV?d00001 diff --git a/hand-in-homework-guide.md b/hand-in-homework-guide.md index ffc7925a0..d1d1466b7 100644 --- a/hand-in-homework-guide.md +++ b/hand-in-homework-guide.md @@ -2,17 +2,13 @@ From this module on you'll submit your homework only using GIT and GitHub. - ## 1. GitHub homework guide Follow the walkthrough to learn how to submit your homework for each week: ONE TIME ONLY (START OF EVERY MODULE) -1. Create a [fork](https://help.github.com/en/articles/fork-a-repo) of the module repository under -the HackYourFuture user. -For example, for JavaScript1, the module repository is `https://www.github.com/HackYourFuture/JavaScript1`. -You can find the `fork` option on the top right corner of the repository. +1. Create a [fork](https://help.github.com/en/articles/fork-a-repo) of the module repository. For JavaScript1, the module repository is `https://www.github.com/HackYourHomework/JavaScript1`. (You can find the `fork` option on the top right corner of the repository.) 2. Navigate to the URL of the cloned repository (it should be in your personal GitHub account, under "repositories") 3. Clone the repository, using SSH, to your local machine. You can do this by typing in `git clone ` in the command line 4. On your local machine, navigate to the folder using the command line @@ -24,17 +20,17 @@ EVERY WEEK 2. Create a folder called `homework` inside of each week's folder. So for example, inside of the `Week1` folder, create a new folder called `homework` 3. Once you're finished, add and commit everything. Make the commit message meaningful, for example `finished project for homework week1` 4. Push the branch to your forked repository -5. On the GitHub page of your forked repository, click on the `create pull request` button. -Make sure that the `base repository` is the module repository E.g. `https://www.github.com/HackYourFuture/JavaScript1.git`, -on branch master. +5. On the GitHub page of your forked repository, click on the `create pull request` button. Make sure that the `base repository` is the module repository E.g. `https://www.github.com/HackYourHomework/JavaScript1`, on branch `master`. 6. Give the pull request a title in the following format: ```markdown Homework week 1 ``` -7. Submit the pull request from your forked repository branch into the `master` branch of the module repository. -Note that you are comparing `your branch + your repository` with the `master branch + module repository`. +7. Submit the pull request from your forked repository. You can do this by clicking 'new pull request': + +![Make a new pull request](./assets/new-pull-request.png) + 8. Do a little victory dance because you did it! Good job! For a visual walkthrough the steps please watch the following video one of our teachers, Unmesh Joshi, has made: From 0feef3231a57b9dbc3deb8f53a3dfee22ec22c3d Mon Sep 17 00:00:00 2001 From: Noer Date: Mon, 30 Mar 2020 14:35:01 +0200 Subject: [PATCH 14/30] Update MAKEME.md --- Week2/MAKEME.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Week2/MAKEME.md b/Week2/MAKEME.md index 397f13782..165f82bc1 100644 --- a/Week2/MAKEME.md +++ b/Week2/MAKEME.md @@ -48,7 +48,7 @@ Report whether or not a number is odd/even! Ever wondered how to make a certain meal? Let's create a recipe list with JavaScript! -1. Declare a variable that holds an object (your meal recipe). +1. Declare a variable that holds an empty object literal (your meal recipe). 2. Give the object 3 properties: a `title` (string), a `servings` (number) and an `ingredients` (array of strings) property. 3. Log each property out seperately, using a loop (for, while or do/while) From 0e8409fc2c5644383b77a7c4a40e323d82705639 Mon Sep 17 00:00:00 2001 From: Noer Paanakker Date: Tue, 7 Apr 2020 00:01:14 +0200 Subject: [PATCH 15/30] adjusted exercise desc and made homework submission more explicit --- README.md | 39 +++++++------ Week1/LESSONPLAN.md | 105 +++++++++++++++++++---------------- Week1/MAKEME.md | 63 ++++++++++++++------- Week1/README.md | 62 +++++++++++++-------- Week2/MAKEME.md | 45 +++++++++------ Week2/README.md | 15 +++-- Week3/MAKEME.md | 113 +++++++++++++++++++++++++++----------- Week3/README.md | 35 +++++++++--- assets/humanbody.jpg | Bin 0 -> 28970 bytes hand-in-homework-guide.md | 10 +--- 10 files changed, 313 insertions(+), 174 deletions(-) create mode 100644 assets/humanbody.jpg diff --git a/README.md b/README.md index dbf980860..0896f13fa 100644 --- a/README.md +++ b/README.md @@ -11,23 +11,21 @@ In this module you'll make a start into wonderful world of programming. We will You'll be learning two main things: -1. Fundamental concepts in programming - While we're using JavaScript to illustrate these concepts, it's important to keep in mind that what you will learn is applicable to **any** programming language. They might differ in syntax (a fancy term for the arrangement of words in a language in order for it to make sense), but the functionality will be the same: a loop will always be a loop. +1. **Fundamental concepts in programming**. While we're using JavaScript to illustrate these concepts, it's important to keep in mind that what you will learn is applicable to **any** programming language. They might differ in syntax (a fancy term for the arrangement of words in a language in order for it to make sense), but the functionality will be the same: a loop will always be a loop. - This should be your mindset when you're learning concepts: **I'm learning how to become a software developer that can adjust to any language used, because I know what the underlying principles and concepts are**. +This should be your mindset when you're learning concepts: **I'm learning how to become a software developer that can adjust to any language used, because I know what the underlying principles and concepts are**. -2. How to think like a programmer - In one sentence this means: **knowing how to solve problems computationally**. Let's split that up in two parts: `how to solve problems` refers to the ability to identify issues and find effective solutions. `computationally` refers to the ability to think in logical steps that the computer can understand and execute. +2. **How to think like a programmer**. In one sentence this means: knowing how to solve problems using a computer. Let's split that up in two parts: `how to solve problems` refers to the ability to identify issues and find effective solutions. `computationally` refers to the ability to think in logical steps that the computer can understand and execute. - This should be your mindset when you're learning how to think : **I'm learning how to think in logical steps, identifying cause and effect, and always looking for solutions**. +This should be your mindset when you're learning how to think : **I'm learning how to think in logical steps, identifying cause and effect, and always looking for solutions**. ## Before you start! In order to test your JavaScript code, you'll be using software that will execute your files from the command line. This software is called [Node.js](https://nodejs.org/en/download/). Download the Long-Term Support (LTS) version for your specific operating system. -- For Windows, click [here](https://nodejs.org/dist/v10.16.0/node-v10.16.0-x64.msi) -- For Mac, click [here](https://nodejs.org/dist/v10.16.0/node-v10.16.0.pkg) -- For Linux, click [here](https://nodejs.org/dist/v10.16.0/node-v10.16.0-linux-x64.tar.xz) +- For Windows, click [here](https://nodejs.org/dist/v12.16.1/node-v12.16.1-x86.msi) +- For Mac, click [here](https://nodejs.org/dist/v12.16.1/node-v12.16.1.pkg) +- For Linux, click [here](https://nodejs.org/dist/v12.16.1/node-v12.16.1-linux-x64.tar.xz) After you've installed it, go to your command line interface. Type in the following command: @@ -35,17 +33,16 @@ After you've installed it, go to your command line interface. Type in the follow node --version ``` -It should show you version `v10.14.2` or higher. +It should show you version `v12.16.1` or higher. ## Learning goals In order to successfully complete this module you will need to master the following: -- Have an idea of what computer programming is -- Know the basic buildingblocks of JavaScript -- Correctly write and use variables, functions and loops -- Understand the control flow -- Think like a programmer +- Have an idea of what `computer programming` is +- Know the basic building blocks of `JavaScript` +- Correctly write and use `variables`, `functions` and `loops` +- Understand the `control flow` ## How to use this repository @@ -55,7 +52,17 @@ This repository consists of 3 parts: 2. `Homework`: this document contains the instructions for each week's homework. 3. `Lesson Plans`: this part is meant for teachers as a reference. However, as a student don't be shy to take a look at it as well! -After your first class you should start with checking the `reading materials` for that week. So, for the first time that is the [Week 1 Reading](/Week1/README.md). Study all the concepts and try to get the gist of everything. After, you can get started with the `homework` for that week. +After your first class you should start with checking the `reading materials` for that week. So, for the first time it's the [Week 1 Reading](/Week1/README.md). Study all the concepts and try to get the gist of everything. After, you can get started with the `homework` for that week. + +Before you start with the homework, make sure you've made a `fork` of the right repository: [HackYourHomework/JavaScript1](https://www.github.com/hackyourhomework/javascript1). Once you've cloned it to your computer you can proceed by making `GIT` branches for each week. Start at the `master` branch and execute the following (note that they're 3 different commands): + +```console +foo@bar:~$ git branch week1-YOURNAME +foo@bar:~$ git branch week2-YOURNAME +foo@bar:~$ git branch week3-YOURNAME +``` + +Then execute `git checkout week1` and you can get started! If you have any questions or if something is not entirely clear ¯\\\_(ツ)\_/¯, please ask/comment on Slack! diff --git a/Week1/LESSONPLAN.md b/Week1/LESSONPLAN.md index f8beb0910..8e4301456 100644 --- a/Week1/LESSONPLAN.md +++ b/Week1/LESSONPLAN.md @@ -13,13 +13,13 @@ The purpose of this class is to introduce to the student: ## Core concepts -*FIRST HALF (12.00 - 13.30)* +_FIRST HALF (12.00 - 13.30)_ ## 1. The 2 types of websites: static vs. dynamic ### Explanation -Static websites usually come with a fixed number of pages that have a specific layout. When the page runs on a browser, the content is literally static and doesn’t change in response to user actions. A static website is usually created with HTML and CSS +Static websites usually come with a fixed number of pages that have a specific layout. When the page runs on a browser, the content is literally static and doesn’t change in response to user actions. A static website is usually created with HTML and CSS Compared to static websites, which are purely informational, a dynamic website is more functional. It allows users to interact with the information that is listed on the page. Of course, that requires utilizing more than just HTML code. ### Example @@ -33,37 +33,37 @@ Examples the two different kind of websites Discuss in class which claim belongs to which type of website: - Content of Web pages can not be change at runtime. - Server side languages such as PHP, Node.js are used. - Content of Web pages can be changed. - No interation with database possible. - Interaction with database is possible - It is faster to load as compared to the other typ of website. - It is slower then static website. - Lower Development costs. - Content may change everytime the page is loaded. - Feature of Content Management System. - HTML, CSS, Javascript is used for developing the website. - Same content is delivered everytime the page is loaded. - +- Content of Web pages can not be change at runtime. +- Server side languages such as PHP, Node.js are used. +- Content of Web pages can be changed. +- No interaction with database possible. +- Interaction with database is possible +- It is faster to load as compared to the other typ of website. +- It is slower then static website. +- Lower Development costs. +- Content may change every time the page is loaded. +- Feature of Content Management System. +- HTML, CSS, Javascript is used for developing the website. +- Same content is delivered every time the page is loaded. + ### Essence [In the link is an article with (dis)advantages of both static and dynamic websites.](https://www.spiderwriting.co.uk/static-dynamic.php) - - Static: + + Static: Advantage: - Flexible - Cheaper Disadvantages: - not updating content - Scalability - + Dynamic: Advantage: - - Easy to pull in data on stuctured and organised way - - Content management system + - Easy to pull in data on structured and organised way + - Content management system Disadvantage: - - Design is more fixed, becasue the pages are more of a template + - Design is more fixed, because the pages are more of a template - Costs ## 2. The pillars of web development: HTML/CSS/JavaScript @@ -98,13 +98,13 @@ These static pages can interact with a visitor only through the use of forms. On A big disadvantage of web pages like this is that the only way that a visitor has of interacting with the page is by filling out the form and waiting for a new page to load. -It doesn't exhibit any dynamic behaviour like: +It doesn't exhibit any dynamic behavior like: 1. reacting to user actions such as mouse click events or key presses. 1. rendering complex animations 1. sending requests over network to servers and fetching a response 1. and this is where JavaScript steps in. - + ## 3. What are variables (const & let) & naming conventions ### Explanation @@ -127,6 +127,7 @@ Three different stages of working with variables are: - Variable assignment means throwing away the old value of a variable and replacing it with a new one. Initialization can be thought of as a special way of assignment. https://github.com/HackYourFuture/fundamentals/blob/master/fundamentals/variables.md + ### Example ```javascript @@ -142,8 +143,8 @@ console.log(age); ```javascript // Variable Initialization -var firstName = 'Yash'; -let lastName = 'Kapila'; +var firstName = "Yash"; +let lastName = "Kapila"; const age = 29; console.log(firstName); @@ -152,15 +153,15 @@ console.log(age); ``` ```javascript -var firstName = 'Tom'; -let lastName = 'Hanks'; +var firstName = "Tom"; +let lastName = "Hanks"; console.log(firstName); console.log(lastName); // Assigning variables to a different value -firstName = 'Hanks'; -lastName = 'Tom'; +firstName = "Hanks"; +lastName = "Tom"; console.log(firstName); console.log(lastName); @@ -169,12 +170,13 @@ console.log(lastName); ### Exercise 1. Create 2 variables using the `let` keyword - 1. make 1 variable contain your first name - 1. the second variable should have no value assigned - + + 1. make 1 variable contain your first name + 1. the second variable should have no value assigned + 1. Make 2 variables using the `const` keyword - 1. the first variable should contain the city you currently stay at - 1. come up with a value for the second variable yourself + 1. the first variable should contain the city you currently stay at + 1. come up with a value for the second variable yourself ### Essence @@ -184,14 +186,15 @@ For example, your name and age are simple pieces of information, a string and a Variables are simply named storage/pointer for this information. -*SECOND HALF (14.00 - 16.00)* +_SECOND HALF (14.00 - 16.00)_ ## 4. The basic data types (string, boolean, number, undefined, null) ### Explanation + Primitive data types are typically types that are built-in or basic to a language implementation. -There are 5 different types of data. The compiler/computer interpretates all the variables we make as one of those datatypes. +There are 5 different types of data. The compiler/computer interprets all the variables we make as one of those data types. (https://javascript.info/types) Boolean — true or false @@ -200,40 +203,48 @@ Undefined — a declared variable but hasn’t been given a value Number — integers, floats, etc String — an array of characters i.e words ?? Symbol — a unique value that's not equal to any other value ?? + ### Example -* `string`, e.g. "HackYourFuture" -* `number`, e.g. 5, or 10.6 -* `boolean`, e.g. `true` or `false` -* `array`\*, e.g. `[1, 2, 3]` or `['what', 'is', 'your', 'name']` -* `null and undefined` The values `null` and `undefined` are very similar in JavaScript, but they behave a bit differently. The difference is that `null` always has type "object", and `undefined` always has type "undefined". + +- `string`, e.g. "HackYourFuture" +- `number`, e.g. 5, or 10.6 +- `boolean`, e.g. `true` or `false` +- `array`\*, e.g. `[1, 2, 3]` or `['what', 'is', 'your', 'name']` +- `null and undefined` The values `null` and `undefined` are very similar in JavaScript, but they behave a bit differently. The difference is that `null` always has type "object", and `undefined` always has type "undefined". Whenever you declare a variable, but you don't set a value, the variable will become `undefined`. JavaScript will never make a variable `null` unless you explicitly program it. -* `symbol` +- `symbol` ```js let x = 5; let typeOfX = typeof x; // -> "number" ``` - ### Exercise -Everybody has two minutes to find a way to declare all basic data types by making use of the typeof operator: + +Everybody has two minutes to find a way to declare all basic data types by making use of the typeof operator: + ```js let x = 5; let typeOfX = typeof x; // -> "number" ``` + ### Essence -In this way we can store a lot of data in a compact way, while the computer/compiler knows how to interpretate the 1's and 0's/ + +In this way we can store a lot of data in a compact way, while the computer/compiler knows how to interpret the 1's and 0's/ ## 5. The compound data types (object, array) ### Explanation ### Example -* `array`\*, e.g. `[1, 2, 3]` or `['what', 'is', 'your', 'name']` -* `object`, e.g. `{name: 'John', age: 24}`, or the special object `null` + +- `array`\*, e.g. `[1, 2, 3]` or `['what', 'is', 'your', 'name']` +- `object`, e.g. `{name: 'John', age: 24}`, or the special object `null` + ### Exercise + ### Essence _Special thanks to Jim Cramer, Yash Kapila, David Nudge for most of the content_ diff --git a/Week1/MAKEME.md b/Week1/MAKEME.md index 787b50988..9b5330f0f 100644 --- a/Week1/MAKEME.md +++ b/Week1/MAKEME.md @@ -26,9 +26,11 @@ In the following exercises you'll learn how to use different JavaScript concepts **Exercise 1: Hello world!** -Write a statement, using the `console.log()` function. Give it a string as an argument. The string should contain the message "Hello world!". +Write a statement, using the `console.log()` function. It should fulfill the following requirements: -Write 10 statements like these, but in different languages. +- It takes a string as an argument +- The string should contain the message `"Hello world!"` +- Execute the function 10 times, each time using the phrase in different languages For example: @@ -38,38 +40,44 @@ Ciao, mondo! // Italian Hola, mundo! // Spanish ``` -Using the command line, navigate to your `js-exercises` folder and type in the following to test your code: +Finished? Using the command line, navigate to your `js-exercises` folder and type in the following to test your code: -``` -node FILENAME.js +```console +foo@bar:~$ node FILENAME.js ``` -It should show the message `Hello world!` in 10 different languages. +Expected output: It should show the message `Hello world!` in 10 different languages. **Exercise 2: Error debugging** Consider the following code: ```js -console.log('I'm awesome'); +console.log('I'm awesome'!; ``` -Copy the code in your `.js` file and run it in the command line using `node`. You will see that you will get a SyntaxError. **Correct the mistake**. +Here are the requirements: + +- Copy the code in your `.js` file and run it in the command line using `node`. + +You will see that you will get a [SyntaxError](https://techterms.com/definition/syntax_error). -Hint: the SyntaxError message will give you some indication of what the error _might_ be, but figure out yourself how to correct it! +- **Correct the mistake**. -When done right, it should show the message `I'm awesome`. +> Hint: the SyntaxError message will give you some indication of what the error _might_ be, but figure out yourself how to correct it! + +Expected output: When done right, the command line should show the message `I'm awesome!`. **Exercise 3: Log the number** Follow the steps. Make sure that each step is written on the line after. -1. First, declare your variable `numberX`. Do not _initialize_ it (which means, don't give it a value) yet. -2. Add a `console.log` statement that explains in words _what you think_ the value of `x` is, like in this example. +1. First, declare your variable `numberX`. Do not _initialize_ it (which means, don't give it a starting value) yet +2. Add a `console.log` statement that explains in words _what you think_ the value of `x` is 3. Add a `console.log` statement that logs the value of `numberX`. -4. Now _initialize_ your variable `numberX` with a number (also called an `integer` in computer science terms). -5. Next, add a `console.log` statement that explains _what you think_ the value of `numberX` is. -6. Add a `console.log` statement that logs the value of `numberX`. +4. Now _initialize_ your variable `numberX` with a number (also called an `integer` in computer science terms) +5. Next, add a `console.log` statement that explains _what you think_ the value of `numberX` is +6. Add a `console.log` statement that logs the value of `numberX` **Exercise 4: Log the string** @@ -86,7 +94,7 @@ Follow the steps. Make sure that each step is written on the line after. Follow the steps. Make sure that each step is written on the line after. -1. Declare a variable `z` and assign the number 7.25 to it. +1. Declare a variable `z` and assign the number `7.25` to it. 2. Write a `console.log` statement in which you log the value of `z`. 3. Declare another variable `a` that has the value of `z` but rounded to the nearest integer. 4. Write a `console.log` statement in which you log the value of `a`. @@ -115,7 +123,14 @@ Follow the steps. Make sure that each step is written on the line after. **Exercise 8: Type checker** -Write a program that checks the data types of two variables and logs to the console `SAME TYPE` if they are the same type. If they are different types log `Not the same...`. +Create a `function` that fulfills the following requirements: + +- Takes in 2 arguments +- Check the data type of each +- Compares each data type +- Logs to the console the message `SAME TYPE` if they are the same type. If they are different types log `Not the same...`. + +Follow the steps: 1. Declare 4 variables: 2 must be `strings` and 2 must be `objects` 2. Create 6 conditional statements, where for each you check if the data type of one variable is the same as the other @@ -142,7 +157,7 @@ if (...) { **Exercise 9: Log the remainder** -For each of these, write in comments what the answer is followed by how you came to that conclusion +Answer the following questions. For each, write in comments what the answer is followed by how you came to that conclusion: 1. If `x` equals 7, and the only other statement is `x = x % 3`, what would be the value of `x` after the calculation? 2. If `y` equals 21, and the only other statement is `y = y % 4`, what would be the value of `y` after the calculation? @@ -150,6 +165,8 @@ For each of these, write in comments what the answer is followed by how you came **Exercise 10: Compare arrays** +Follow the steps: + 1. Declare 2 variables, that each hold an array. The first array should have 4 items, the second 7 items 2. Find out how to get the length of each array. Write a `console.log` statement that shows the length of each array @@ -163,9 +180,11 @@ console.log('The length of the array is...' + ...); ## **3. Code along** +> Create a new GitHub repository for this project. It's a portfolio piece! + We don't want to lose the connection with HTML/CSS, so in the following tutorial you'll learn how to build a simple web application use HTML/CSS and JavaScript. -You'll first write the HTML and CSS, to provide structure and style to the page. When doing so, keep notice of how the developer chooses to do this. Why do they use this tag instead of something else? Why do they give an element a certain class name? +You'll first write the HTML and CSS, to provide structure and style to the page. When doing so, notice how the developer chooses to do this. Why do they use this tag instead of something else? Why do they give an element a certain class name? After, the developer will write JavaScript code. You'll notice it's different from how you've used JavaScript. It is something we call **DOM Manipulation**. Don't worry, you don't need to master this just yet. Just follow along and do some research yourself if you already want to learn more about it! @@ -173,9 +192,11 @@ After, the developer will write JavaScript code. You'll notice it's different fr ## **SUBMIT YOUR HOMEWORK!** -After you've finished your todo list it's time to show us what you got! Starting from this week you'll be submitting all your homework through GitHub. What you'll be doing is upload all your files to a forked repository (a copy from the original, which in this case is the [JavaScript1](https://www.github.com/HackYourFuture/JavaScript1) repository) using GIT. +After you've finished your todo list it's time to show us what you got! Starting from this week you'll be submitting all your homework through GitHub. What you'll be doing is upload all your files to a separate repository. + +Go over to [HackYourHomework/JavaScript1](https://www.github.com/HackYourHomework/JavaScript1). Notice how it's **HackYourHomework**, a repository meant to submit the homework! -Take a look at the following [guide](../hand-in-homework-guide.md) to see how it's done. +Then take a look at the following [guide](../hand-in-homework-guide.md) to see to set everything up. The homework that needs to be submitted is the following: diff --git a/Week1/README.md b/Week1/README.md index ecfaf004b..e82242ebe 100644 --- a/Week1/README.md +++ b/Week1/README.md @@ -5,7 +5,6 @@ These are the topics for week 1: 1. What is programming? - - Introduction - Software - What is a programming language? 2. What is web development? @@ -21,15 +20,18 @@ These are the topics for week 1: ## 1. What is programming? -### Introduction - Programming is giving a computer instructions written in a language it can understand, in order to solve a problem. We don't necessarily need computers to solve problems, but we use them because they provide several benefits: 1. They are fast 2. Cheap to use 3. Can work 24/7 (as long as it has power) -This is important to note: a computer is a `tool` we use to make our lives easier. In order to use this tool, we need to talk to it in a way it understands (programming language) and give it commands on what to do (programming). However, despite the power a computer has it is not very smart. It can't do anything without being told **exactly** what it needs to do to solve a problem. This is why we learn how to program: in order to tell the computer to do what we want it to do. +This is important to note: a computer is a `tool` we use to make our lives easier. + +- [What is a Computer?](https://www.youtube.com/watch?v=rRSD128KWIM) +- [What Do Computers Do?](https://www.youtube.com/watch?v=92TaQRBwPSs) + +In order to use this tool, we need to talk to it in a way it understands (programming language) and give it commands on what to do (the act of programming). However, despite the power a computer has it is not very smart. It can't do anything without being told **exactly** what it needs to do to solve a problem, step-by-step. This is why we learn how to program: in order to tell the computer to do what we want it to do. Go through the following resources to learn more about what programming is: @@ -44,7 +46,7 @@ As a software developer (synonym to 'programmer'), you will write these instruct ### What is a programming language? -Programming is done using a programming language. Why do we need a language to communicate with the computer? At its most basic level, a computer operates based on 0's and 1's: the 0 means 'off', and the 1 means 'on' (think of it like a light switch that either turns the light on or off). +Programming is done using a programming language. Why do we need a language to communicate with the computer? At its most basic level, a computer operates based on 0's and 1's: the 0 means 'off', and the 1 means 'on' (think of it like a light switch that either turns the light on or off). Smart people decided to make working with this easier to understand, so that a lot of people can more simply communicate with a computer. This is how the development of programming languages started: by defining a vocabulary, grammar and syntax to put more organization to the 0's and 1's, we can more simply communicate exactly what we want to computer to do. @@ -56,7 +58,7 @@ There are various languages, each made to fulfill a certain need. For example, M ## 1. What is web development? -In HackYourFuture we focus on `web` programmming (also known as `web development`): writing code that creates websites and web applications. Look at the following video to learn about what you'll be doing: +In HackYourFuture we focus on `web programmming` (also known as `web development`): writing code that creates websites and web applications. Look at the following video to learn about what you'll be doing: - [What does a web developer do?](https://www.youtube.com/watch?v=GEfuOMzRgXo) @@ -64,32 +66,32 @@ In HackYourFuture we focus on `web` programmming (also known as `web development The field of programming is broad. As a software developer (a general term for anyone that writes code to create software) there are several career paths you might take. The following are some of the biggest: -1. Web. Developing websites and web applications to be accessed and used in the browser -2. Mobile. This refers mostly to Android and iOS application development -3. Desktop. Every application on your computer has been made by desktop developers -4. Data science. Writing custom programs to extract patterns from big piles of data is what this developer does. -5. Gaming. Game developers work with a variety of designers, artists and testers to realize a video game -6. Quality Assurance. Applications need to be tested, and these developers write tests that check for the correct working of any piece of code +1. **Web**. Developing websites and web applications to be accessed and used in the browser +2. **Mobile**. This refers mostly to Android and iOS application development +3. **Desktop**. Every application on your computer has been made by desktop developers +4. **Data science**. Writing custom programs to extract patterns from big piles of data is what this developer does +5. **Gaming**. Game developers work with a variety of designers, artists and testers to realize a video game +6. **Quality Assurance**. Applications need to be tested, and these developers write tests that check for the correct working of any piece of code Read the following article to read more about different career paths: - [Software Development Career Paths](https://simpleprogrammer.com/software-development-career-paths/#title-career-developer-options) -Note: once you've chosen a certain track it doesn't mean you can't try out any other! If anything, you are encouraged to explore and see what fits your taste :) +Note: once you've chosen a certain track it doesn't mean you can't try out any other! If anything, you are encouraged to explore and see what fits your taste, while building your career :) ### Web development vs. web design You might have heard these terms used interchangeably. They are, however, two different things. A web developer writes code and handles the logical, technical side. A web designer decides how things are going to look and handle the creative side. The following video will explain this more clearly: -[Web Developer vs. Web Designer](https://www.youtube.com/watch?v=M-M7jBV_Gf4) +[Web Developer vs. Web Designer](https://www.youtube.com/watch?v=bDtxF7qSofg) ### Websites vs. web applications Before we get started with the meat of the module (which is JavaScript), we need to make a small but important distinction: are we going to make websites or web applications? For non-developers, there is no difference but for you as a developer you must know what it is that you'll be producing. -The difference between a website and a web application is the difference between [Wikipedia](https://www.wikipedia.org) and [Facebook](https://wwww.facebook.com). In Facebook, the data shown changes depending on the user. If you are logged in, you'll see different things than that I will. However, on Wikipedia the information will always be the same, for both you and me. +The difference between a website and a web application is the difference between [Wikipedia](https://www.wikipedia.org) and [Facebook](https://wwww.facebook.com). In Facebook, the data shown changes depending on the user. If you are logged in, you'll see different things than that I will. However, on Wikipedia the information will always be the same, for both you and me. -In other words, we're talking about `static` versus `dynamic` sites: a static site always has the same information and serves only to be information, while a dynamic site changes the data shown to the user depending on who it is and what their interactivity on the page is. +In other words, we're talking about `static`(= website) versus `dynamic` (= application) sites: a static site always has the same information and serves only to be information, while a dynamic site changes the data shown to the user depending on who it is and what their interactivity on the page is. Read the following articles to learn more about this: @@ -100,7 +102,9 @@ Read the following articles to learn more about this: JavaScript is a programming language. We use it to communicate with the browser, software that allows us to access the Internet and open webpages. It is essential to learn in order to become a web developer. -You've already learned what HTML and CSS do. Javascript is the third part that makes the circle complete. If we liken the three to the human body, we could say that HTML provides the skeleton, CSS provides the skin and shape, and JavaScript provides the animation/interactivity. +You've already learned what HTML and CSS do. Javascript is the third part that makes the circle complete. If we liken the three to the human body, we could say that HTML provides the skeleton with all the basic content, CSS makes the skin/shape to determine the look, and JavaScript is the brain and muscles to allow for interactivity. + +![Human Body](./../assets/humanbody.jpg) The main use for JavaScript is to make your webpage interactive: for example, if you click a button it will open a popup. Or if you scroll over an image, it changes its color. @@ -111,7 +115,10 @@ Check the following resources to learn more about it: ## 4. What are variables? -A variable is a piece of information that is saved. You give it a name that describes what its contents are, and to also refer to it at a later point. +A variable is a piece of information that is saved for later use. You give it a name that describes what its contents are, and to also refer to it at a later point. + +- [Beginner Programming Concepts - What's a Variable? + ](https://www.youtube.com/watch?v=Jvrszgiexg0) ### The keywords: let, const, var @@ -125,24 +132,35 @@ A variable always contains a `value`: a piece of information that you want to re When creating variables, it's important to think about the right name to give it. It should always reflect what "type" of data it contains and how it would make sense in light of the rest of your code. You (and other developers that will read your code) should be able to read a variable name and know what its purpose is. -Why do we need variables? You'll be using variables to manipulate its content (the value inside the variable). Why would you want to do this? For most of the time, you want to perform some kind of calculation. The most basic example is the following: +Why do we need variables? You'll be using variables **to manipulate its content** (the value inside the variable). Why would you want to do this? For most of the time, you want to perform some kind of calculation. The most basic example is the following: ```js const one = 1; const two = one + one; ``` -Here we have assigned to a new variable the calculation `one` plus `one`. Why have we put the end result into a new variable? It is because the result of the calculation will not be remembered later down the line of code, so we store it in a variable in case we want to manipulate that some point later. +Here we have assigned to a new variable the calculation `one` plus `one`. Why have we put the end result into a new variable? It is because the result of the calculation will **not be remembered** later. Memory works differently in computers: after a calculation is finished a computer thinks its job is done. The result will not exist after, unless explicitly captured within a variable. This is something that you will learn when you start coding yourself. If you can't wait you can already look at the [homework](./MAKEME.md). ## 5. What are data types? -A data type is a category of data. It tells the code interpreter what kind of data it is reading so it knows how to optimally store it in memory. An example of this is the Number type. In most programming languages, when it reads the number `2` it doesn't know that it's a number. It needs to be told it is so. In JavaScript, however, that is assumed. +A data type is a category of data. It tells the code interpreter what kind of data it is reading so it knows how to process and optimally store it in memory. + +An example of this is the `Number` type. In most programming languages, when it reads the number `2` it doesn't know that it's a number. It needs to be told that the character `2` is of the `Number` data type. ## 6 Basic types -There are about 6 basic data types in JavaScript. String, Number, Boolean, Object, Array, and Function. You can read more about them in the following article: +There are about `6 basic data types` in JavaScript: + +- `String` +- `Number` +- `Boolean` +- `Object` +- `Array` +- `Function` + +You can read more about them in the following article: - [JavaScript Data Types](https://www.tutorialrepublic.com/javascript-tutorial/javascript-data-types.php) - [JS Data Types](https://www.w3schools.com/js/js_datatypes.asp) diff --git a/Week2/MAKEME.md b/Week2/MAKEME.md index 397f13782..77369b5b4 100644 --- a/Week2/MAKEME.md +++ b/Week2/MAKEME.md @@ -9,10 +9,10 @@ ## **1. Practice the concepts** -In this section you will be doing interactice exercises, that will allow you to practice with the concepts you've learned about this week! +In this section you will be doing interactive exercises, that will allow you to practice with the concepts you've learned about this week! -- [Codecademy: Arrays](https://www.codecademy.com/courses/introduction-to-javascript/lessons/arrays) -- [FreeCodeCamp: Basic data structures](https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/basic-data-structures) +- Do all parts of [Codecademy: Arrays](https://www.codecademy.com/courses/introduction-to-javascript/lessons/arrays) (Signup required!) +- Do 5 exercises of [FreeCodeCamp: Basic data structures](https://learn.freecodecamp.org/javascript-algorithms-and-data-structures/basic-data-structures) ## **2. JavaScript exercises** @@ -27,14 +27,18 @@ In this section you will be doing interactice exercises, that will allow you to Consider the following string: ```js -let myString = "hello,this,is,a,difficult,to,read,sentence"; +let myString = 'hello,this,is,a,difficult,to,read,sentence'; ``` +Follow the steps: + 1. Add the variable to your file. 2. Log the length of `myString`. 3. The commas make that the sentence is quite hard to read. Find a way to remove the commas from the string and replace them with spaces. (use Google!) 4. After replacing the commas, log `myString` to see if you succeeded. +Expected result in the console: `hello this is a difficult to read sentence` + **Exercise 2: The even/odd reporter** Report whether or not a number is odd/even! @@ -50,23 +54,22 @@ Ever wondered how to make a certain meal? Let's create a recipe list with JavaSc 1. Declare a variable that holds an object (your meal recipe). 2. Give the object 3 properties: a `title` (string), a `servings` (number) and an `ingredients` (array of strings) property. -3. Log each property out seperately, using a loop (for, while or do/while) +3. Log each property out separately, using a loop (for, while or do/while) -It should look similar to this: +Expected result: -```markdown -Meal name: Omelete +```console +Meal name: Omelette Serves: 2 -Ingredients: -4 eggs -2 strips of bacon -1 tsp salt/pepper +Ingredients: 4 eggs, 2 strips of bacon, 1 tsp salt/pepper ``` **Exercise 4: The reading list** Keep track of which books you read and which books you want to read! +Follow the steps: + 1. Declare a variable that holds an array of 3 objects, where each object describes a book and has properties for the `title` (string), `author` (string), and `alreadyRead` (boolean indicating if you read it yet). 2. Loop through the array of books. 3. For each book, log the book title and book author like so: "The Hobbit by J.R.R. Tolkien". @@ -82,21 +85,31 @@ You're at a party and you feel thirsty! However, you've got 5 friends who are al There are 3 different types of drinks: ```js -const drinkTypes = ["cola", "lemonade", "water"]; +const drinkTypes = ['cola', 'lemonade', 'water']; ``` 2. Create a loop that runs 5 times. On each iteration, push a drink into the `drinkTray` variable. The `drinkTray` can only hold at most two instances of the same drink type, for example it can only hold 2 colas, 2 lemonades, 2 waters. + +```js +// Expected result: +const drinkTray = ['cola', 'cola', 'lemonade', 'lemonade', 'water']; + +// 'Hey guys, I brought a cola, cola, lemonade, lemonade, water!' +``` + 3. If there are already two instances of a `drinkType` then start with the next drink in the array. 4. Your `drinkTray` should contain 2 cola, 2 lemonade and 1 water. 5. Log to the console: "Hey guys, I brought a [INSERT VALUES FROM ARRAY]!" (For example: "Hey guys, I brought a cola, cola, lemonade, lemonade, water!") +Test out your code using `node` in the command line! + ## **3. Code along** -> Create a new folder outside of your `JavaScript1` fork +> Create a new GitHub repository for each of these projects. They are portfolio pieces! In the following 2 projects you'll be flexing your HTML/CSS skills again, together with writing JavaScript code. They are similar in structure and logic, so be sure to spot the similarities! -It's ok if you don't understand exactly what's happening here. Just follow along and try to understand: ask questions about what the developer is doing and think about every line of code. +It's ok if you don't understand exactly what's happening here. Just follow along and try to understand: ask yourself questions about what the developer is doing and think about every line of code. **Project 1: Temperature Converter** @@ -159,7 +172,7 @@ After you've finished your todo list it's time to show us what you got! The home 1. JavaScript exercises 2. PROJECT: Grade calculator -Upload both to your forked JavaScript1 repository in GitHub. Make a pull request to the original repository. +Upload both to your JavaScript1 repository forked to your personal account in GitHub. Make a pull request to the [HackYourHomework/JavaScript1](https://www.github.com/hackyourhomework/javascript1). > Forgotten how to upload your homework? Go through the [guide](../hand-in-homework-guide.md) to learn how to do this again. diff --git a/Week2/README.md b/Week2/README.md index af0ca5eb2..015b4eee5 100644 --- a/Week2/README.md +++ b/Week2/README.md @@ -19,14 +19,16 @@ This is the same in programming. A difference is that it's done in abstract code To learn more about statements vs. expression, research the following resources: -- [Statements vs. Expressions](https://github.com/HackYourFuture/fundamentals/blob/master/fundamentals/statements_expressions.md) - [Expressions vs. Statements in JS](https://www.youtube.com/watch?v=WVyCrI1cHi8) +- [Statements vs. Expressions](https://github.com/HackYourFuture/fundamentals/blob/master/fundamentals/statements_expressions.md) ## 2. Loops -A loop is a sequence of instructions that is continually repeated until a certain condition is fulfilled. This condition could either be a specified number or when a desired value is found. +A loop is a sequence of instructions that is continually repeated until a certain condition is fulfilled. This condition could either be a specified number or when a desired value is found or not. + +In programming, a loop is meant to be used in case there's a repetitive task that needs to be done. -Read more about loops here: +Learn more about loops here: - [JavaScript Loops](https://www.youtube.com/watch?v=s9wW2PpJsmQ) - [Loops](https://github.com/HackYourFuture/fundamentals/blob/master/fundamentals/loops.md) @@ -39,10 +41,11 @@ In the language of JavaScript this goes from top to bottom, left to right. This > The term `flow` is a general term meaning a specific, repeatable order of actions. In your working life you'll hear the term `workflow`, which in that case refers to the different actions necessary to complete a business activity. -There is one important distinction between spoken language and programming languages: in programming languages the order in which the code is read can change, depending on various `control statements`. +There is one important distinction between spoken language and programming languages: in programming languages the order in which the code is read can change, depending on various `control statements` (`if`, `for/while/do-while loop` or `switch`). Learn more about control flow here: +- [Introduction to Programming - Control Flow](https://www.youtube.com/watch?v=nBj2nJup8xU) - [Control flow](https://dev.to/mugas/control-flow-in-javascript-246l) ## 4. Operators @@ -60,10 +63,11 @@ Computers only function by logical rules: whether something is true or not deter ```js if () { + // then this will happen } ``` -A condition is put in the `( )` and it needs to evaluate to `true` or `false` (also known as Boolean values). If the condition is true, then whatever is inside the `{ }` will be executed. +A condition is put in the `( )` and it needs to evaluate to `true` or `false` (also known as `Boolean` values). If the condition is true, then whatever is inside the `{ }` will be executed. What happens when the condition is false? For that we have the `else { }` block. If the condition is false, then whatever is inside the else will be executed: @@ -82,6 +86,7 @@ A naming convention is a rule that every developer should hold themselves to whe Read about the different naming conventions for JavaScript here: +- [Naming Conventions in Programming](https://blog.jsecademy.com/naming-conventions-in-programming/) - [Naming conventions](https://github.com/HackYourFuture/fundamentals/blob/master/fundamentals/naming_conventions.md) ## Finished? diff --git a/Week3/MAKEME.md b/Week3/MAKEME.md index f32e7c5dd..d07719332 100644 --- a/Week3/MAKEME.md +++ b/Week3/MAKEME.md @@ -33,63 +33,106 @@ There is no better way to start your day then with a compliment! 1. Write a function named `giveCompliment` - It takes 1 argument: your name -- Inside the function create an array with 10 strings. Each string should be a compliment, like `"great"`, `"awesome"` -- Write logic that randomly selects a compliment +- Inside the function define a variable that holds an array, `compliments`, with 10 strings. Each string should be a compliment, like `"great"`, `"awesome"` +- Write code that randomly selects a compliment - Return a string: "You are [COMPLIMENT], [YOUR_NAME]! 2. Call the function three times, giving each function call the same argument: your name. +```js +// Expected output +giveCompliment('Noer'); // Returns "You are amazing, Noer!" +giveCompliment('Noer'); // Returns "You are great, Noer!" +giveCompliment('Noer'); // Returns "You are supersmart, Noer!" +``` + **Exercise 2: Dog years** -You know how old your dog is in human years, but what about dog years? Calculate it! +You know how old your dog is in human years, but what about dog years? Let's calculate it! 1. Write a function named `calculateDogAge`. -- It takes 1 argument: your puppy's age (number). -- Calculate your dog's age based on the conversion rate of 1 human year to 7 dog years. +- It takes 1 argument: your (fictional) puppy's age (number). +- Calculate your dog's age based on the conversion rate of `1 human year to 7 dog years`. - Return a string: "Your doggie is [CALCULATED_VALUE] years old in dog years!" 2. Call the function three times with different sets of values. +```js +// Expected output +calculateDogAge(1); // Returns "Your doggie is 7 years old in dog years!" +calculateDogAge(2); // Returns "Your doggie is 14 years old in dog years!" +calculateDogAge(3); // Returns "Your doggie is 21 years old in dog years!" +``` + **Exercise 3: Be your own fortune teller** Why pay a fortune teller when you can just program your fortune yourself? -1. Write a function named `tellFortune`. +1. Create 4 arrays, `numChildren`, `partnerNames`, `locations` and `jobs`. Give each array 5 random string values that have to do with the name of the variable +2. Write a function named `tellFortune`. - It takes 4 arguments: number of children (number), partner's name (string), geographic location (string), job title (string). - Randomly select values from the arrays. -- Return a string: "You will be a [JOB_TITLE] in [LOCATION], and married to [PARTNER_NAME] with [NUMBER_KIDS] kids." +- Return a string: "You will be a [JOB_TITLE] in [LOCATION], married to [PARTNER_NAME] with [NUMBER_KIDS] kids." -2. Create 4 arrays, `numChildren`, `partnerNames`, `locations` and `jobs`. Give each array 5 random values that make sense -3. Call the function 1 time, by passing the arrays as the argument. +3. Call the function 3 times, by passing the arrays as the argument. + +```js +// Expected output +const numChildren = [...]; +const partnerNames = [...]; +const locations = [...]; +const jobs = [...]; + +tellFortune(numChildren, partnerNames, locations, jobs); // Returns "You will be a programmer in The Netherlands, married to Layla with 3 kids." +tellFortune(numChildren, partnerNames, locations, jobs); // Returns "You will be a farmer in France, married to Muhammed with 2 kids." +tellFortune(numChildren, partnerNames, locations, jobs); // Returns "You will be a teacher in The United States, married to Zara with 4 kids." +``` **Exercise 4: Shopping at the supermarket** Let's do some grocery shopping! We're going to get some things to cook dinner with. However, you like to spend your money and always buy too many things. So when you have more than 3 items in your shopping cart the first item gets taken out. -1. Write a function named `addToShoppingCart`. +1. Create an array called `shoppingCart` that holds the following strings: `"bananas"` and `"milk"` +2. Write a function named `addToShoppingCart` -- It takes in 1 argument: a grocery item (string) -- Add grocery item to array. If the amount of items is more than 3 remove the first one in the array +- It takes 1 argument: a grocery item (string) +- Add grocery item to `shoppingCart`. If the amount of items is more than 3 remove the first one in the array +- Loops through the array in order to list out the items - Return a string: "You bought [LIST_OF_GROCERY_ITEMS]!" -2. Create an array with 2 predefined strings: `"bananas"` and `"milk"` 3. Call the function 3 times, each time with a different string as the argument. +```js +const shoppingCart = ['bananas', 'milk']; + +// Expected output +addToShoppingCart('chocolate'); // Returns "You bought bananas, milk, chocolate!" +addToShoppingCart('waffles'); // Returns "You bought milk, chocolate, waffles!" +addToShoppingCart('tea'); // Returns "You bought chocolate, waffles, tea!" +``` + **Exercise 5: Total cost is ...** -You want to buy a couple of things from the supermarket to prepare for a party. After scanning all the items the cashier gives you the total price, but the machine a broken! Let's write her a function that does it for her instead! +You want to buy a couple of things from the supermarket to prepare for a party. After scanning all the items the cashier wants to give you the total price, but the machine is broken! Let's write her a `function` that does it for her instead! -1. Write a function called `calculateTotalPrice` +1. Create an object named `cartForParty` with 5 properties. Each property should be a grocery item (like `beers` or `chips`) and hold a number value (like `1.75` or `0.99`) +2. Write a function called `calculateTotalPrice` - It takes 1 argument: an object that contains properties that only contain number values -- Add all the number values together -- Return a number: the total price of all items +- Loop through the object and add all the number values together +- Return a string: "Total: €[TOTAL_PRICE_ITEMS]" -2. Create an object named `cartForParty` with 5 properties. Each property should be a grocery item (like `beers` or `chips`) and hold a number value (like `1.75` or `0.99`) 3. Call the function 1 time, giving it the object `cartForParty` as an argument +```js +const cartForParty = { ... } + +// Expected output +calculateTotalPrice(cartForParty); // Returns "Total: €10.75" +``` + ## **3. Code along** In this project you'll be building a simple meditation application, that will allow you to set a timer, loop a video and play a song! @@ -102,15 +145,17 @@ You'll be working with the