Skip to content

Commit 588209c

Browse files
author
Luca Sartori
committed
Week one draft
0 parents  commit 588209c

File tree

6 files changed

+333
-0
lines changed

6 files changed

+333
-0
lines changed

README.md

+333
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,333 @@
1+
# JavaScript / Angular Bootcamp
2+
3+
Please, use this repository as a base for you training phase. The idea is to
4+
fork this project so everyone use the same folder structure for the
5+
exercises.
6+
7+
8+
#### Index
9+
10+
1. [Objective](#objective)
11+
12+
2. [Who Should Attend](#who-should-attend)
13+
14+
3. [Duration](#duration)
15+
16+
4. [Technical Assistance](#technical-assistance)
17+
18+
5. [Performance Measurement](#performance-measurement)
19+
20+
6. [Handling advanced Developers](#handling-advanced-developers)
21+
22+
7. [Materials](#materials)
23+
24+
8. [Bootcamp Schedule](#bootcamp-schedule)
25+
26+
9. [General Guidelines](#general-guidelines)
27+
28+
10. [Learning Days](#learning-days)
29+
30+
- 10.1 [Week 1: JavaScript and Node 101](#week-1-javascript-and-node-101)
31+
- 10.2 [Week 2: TypeScript and Angular 101](#week-2-typescript-and-angular-101)
32+
- 10.3 [Week 3: Angular 201](#week-3-angular-201)
33+
- 10.4 [Week 4: Angular 301 and stuff](#week-4-angular-301-and-stuff)
34+
35+
36+
### Objective
37+
38+
This course teaches the basics of JavaScript development and [Single Page Applications](https://medium.com/@NeotericEU/single-page-application-vs-multiple-page-application-2591588efe58) with Angular.
39+
40+
[index](#index)
41+
42+
### Who Should Attend
43+
44+
The training will start at a low level and does not require in depth knowledge
45+
of the platform in question. Desirable participant profile: trainees and outside
46+
Globant candidates. A basic knowledge on OOP is desired, though.
47+
48+
[index](#index)
49+
50+
### Duration
51+
52+
Four weeks total. (20 days)
53+
54+
[index](#index)
55+
56+
### Technical Assistance
57+
58+
You can contact other Bootcamp participants or any available tutor if you need
59+
technical assistance. Comunnications will take place over [Slack](https://slack.com/features) on our own [Bootcamp Channel]()
60+
61+
### Performance Measurement
62+
63+
1. Code review after each practice.
64+
65+
2. Checkpoint completion after Learning stage with your assigned tutor.
66+
67+
3. Final Application after Bootcamp.
68+
69+
[index](#index)
70+
71+
72+
### Handling Advanced Developers
73+
74+
Developers that move faster than average can go ahead and complete as much
75+
exercises as wanted.
76+
77+
[index](#index)
78+
79+
### Materials
80+
81+
1. You will need to install [Node.JS](https://nodejs.org/en/) (NVM is strongly recommended - [Unix](https://github.com/creationix/nvm#installation)/[Windows](https://github.com/coreybutler/nvm-windows))
82+
83+
2. The recommended IDE is [Visual Studio Code](https://code.visualstudio.com/). However, you can use any IDE of your preference.
84+
85+
3. Gmail Account + headset (For hangout calls)
86+
87+
4. Create your own [GitHub](https://github.com/) account. Follow
88+
this [guideline](https://help.github.com/articles/set-up-git) to setup your
89+
account. Also you can read further about Git in
90+
[Try Git](https://try.github.io/levels/1/challenges/1) or
91+
[Learn Git Branching](http://pcottle.github.io/learnGitBranching/)
92+
93+
5. Fork this repo to use as a base to host the project code.
94+
95+
[index](#index)
96+
97+
### Bootcamp Schedule
98+
99+
The boot camp is organized in the following way:
100+
101+
![Calendar](assets/calendar.png)
102+
103+
The first week is oriented to learn the basics around JavaScript and Node. This
104+
Bootcamp assumes you already know the basics of Js syntax. If this is not your
105+
case, it is recommended to take a look to the following topics:
106+
107+
- [Js Values, Types, and Operators](http://eloquentjavascript.net/01_values.html)
108+
- [Js Program Structure](http://eloquentjavascript.net/02_program_structure.html)
109+
- [Js Functions](http://eloquentjavascript.net/03_functions.html)
110+
- [Js Data Structures: Objects and Arrays](http://eloquentjavascript.net/04_data.html)
111+
112+
Each day of the first week you will have a small exercise at the end of the day.
113+
You must code the exercise inside the corresponding folder, example
114+
src/week1/day1/index.js will contain the code for the exercise of the Day 1.
115+
116+
The second week introduces you to TypeScript and Angular. JavaScript is an easy typed language, that means
117+
as a developer you have total control over the whole structure of the code. Sometimes that's
118+
an advantage, but as the app grows and more people become involved things go out of hand.
119+
That's when TypeScript comes to the rescue. At the end of this week you will have a basic Angular App running.
120+
121+
The third week is oriented to learn Angular at an intermediate level. Angular is one of the biggest UI frameworks
122+
out there; there's a lot to learn. On this week's challenge you will be expected to do an application
123+
with routing, forms, and some sweet Flexbox magic.
124+
125+
The last week will be focused on intermediate/advanced Angular (and not Angular exclusive) features.
126+
You will learn about Cross-Compiled apps, Hybrid Apps, and Progressive Web Apps. At the end of the week the challenge
127+
awaiting for you is making last week's app more scallable, you will add lazy loaded modules with routing and you will
128+
upgrade the security with some route guards.
129+
130+
131+
### General Guidelines
132+
133+
1. [Team play](http://www.dummies.com/how-to/content/ten-qualities-of-an-effective-team-player.html) is encouraged but the work will be evaluated per person.
134+
135+
2. The instructions will be vague as they generally are in real life projects.
136+
You must look for support and guidance from your PM, teammates and tutors.
137+
138+
3. All code and documentation must be in English.
139+
140+
4. Js Code must adhere to this [Coding Style Guide](https://github.com/airbnb/javascript).
141+
142+
5. Ts and Angular Code must adhere to this [Coding Style Guide](https://angular.io/guide/styleguide).
143+
144+
[index](#index)
145+
146+
### Learning Days ###
147+
148+
Each day you will grab the fundamentals of the key building blocks for usual
149+
Js/Ts/Angular applications.
150+
151+
On each learning day you will have to:
152+
153+
1. **Read:**
154+
We will provide you with documentation related with current sprint content so
155+
you can have a background reference, guide and examples to complete the
156+
following practice.
157+
158+
2. **Practice:**
159+
You will implement the previously gathered knowledge in simple coding activities.
160+
161+
3. **Commit:**
162+
You will commit all your code on a daily basis, when you finish your practice. This will not apply for code of Week 4.
163+
164+
# Introduction
165+
166+
- This repository contains inside the `src` directory the project structure for all exercises/challenges that you will
167+
need to do.
168+
169+
- All `.js` code can be opened directly on the browser. For Ts and Angular code you will need to run a Liteserver with
170+
the Angular CLI. Just running `npm run serve` will be enough
171+
172+
- Once the server is running, all the modifications you make will be automagically synced and the app will reload.
173+
174+
- [Basic GIT concepts](https://git-scm.com/book/en/v2/Git-Basics-Getting-a-Git-Repository)
175+
176+
[index](#index)
177+
178+
# Week 1: JavaScript and Node 101
179+
180+
## Day 1: The Secret Life of Objects
181+
182+
![Suspicious](assets/suspicious.gif)
183+
184+
Js is often called an Object oriented language, but actually that isn't 100% true. In Js
185+
we have what's called `Prototipal Inheritance`.
186+
In this lesson you will learn all about the Prototype, Inheritance, Getters, Setters, Constructors and Polymorfism.
187+
188+
### Reading:
189+
190+
- [Objects](http://eloquentjavascript.net/06_object.html)
191+
192+
### Exercise:
193+
194+
**Notes:**
195+
196+
### ~~Not So~~ Optional Reading
197+
Since ES6 went out we do have a _Class like_ sintax, **HOWEVER** that's [Syntactic Sugar](https://en.wikipedia.org/wiki/Syntactic_sugar).
198+
We still have that ~~hideous~~ beautiful `Prototype` under the hood, so don't get confused.
199+
200+
- [ES6 Class Sintax](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes)
201+
202+
## Day 2: Going Regular with RegEx (Also, learn how to hunt those bugs)
203+
One of the most ~~hated~~ used features on any kind of language are Regular Expressions, aka RegEx. Those are **REALLY** powerfull strings (they are more like a really special kind of strings) that allow you to capture any pattern you want on any kind of string. You can make sure all emails accounts end up with `@something.com` or all the names are at most 4 characters long... you get the idea.
204+
205+
Also, you will be learning error handling and some of the finest debugging techniques out there. Or, as I like to call them, **_learn how to properly use the browser console_**.
206+
207+
Read up and catch 'em all
208+
209+
![Catch](assets/catch.gif)
210+
211+
212+
### Reading:
213+
- [Regular Expressions](http://eloquentjavascript.net/09_regexp.html)
214+
- [Errors and debugging](http://eloquentjavascript.net/08_error.html)
215+
216+
### Exercise:
217+
218+
**Notes:**
219+
220+
## Day 3: The browser, where the _magic_ happens
221+
222+
So, you have a text file called _whatever.js_, you have ~200 lines in there (or you should, codebases of ~ 1k lines are made by horrible people). You double click the file, an browser opens and
223+
224+
![Mindblown](assets/mindblown.gif)
225+
226+
The code comes to life. All works fine (at least if you coded right :unamused:) it's
227+
228+
![Magic](assets/magic.gif)
229+
230+
No, no it's not. It's the browser's engine. Js runs inside a browser on a [VM](https://en.wikipedia.org/wiki/JavaScript_engine), that VM could be
231+
[V8](https://developers.google.com/v8/) (Chrome), [SpiderMonkey](https://developer.mozilla.org/en-US/docs/Mozilla/Projects/SpiderMonkey) (Firefox), [Chakra](https://github.com/Microsoft/ChakraCore) (Edge) or [Nitro](https://developer.apple.com/documentation/javascriptcore) (Safari)
232+
233+
For day 3 you will learn about the Browser, the Document Object Model (basically the whole thing you are seeing on the browser's window) and DOM Events.
234+
235+
### Reading:
236+
237+
- [The Browser](http://eloquentjavascript.net/12_browser.html)
238+
- [DOM](http://eloquentjavascript.net/13_dom.html)
239+
- [Events](http://eloquentjavascript.net/14_event.html)
240+
241+
If you used jQuery, this is the time you realize that it's not so magic, it's Js, and you can do all the things jQuery does with vanilla Js. And in a few weeks you'll be refusing to use jQuery again :stuck_out_tongue_closed_eyes:
242+
243+
### ~~Not So~~ Optional Reading
244+
The browser and the server (the little computer thingy that lives on the cloud and has all your files) communicates via `HTTP`. That's a protocol, something like a standarized way to send messages. You can read more about it here:
245+
246+
- [HTTP](http://eloquentjavascript.net/17_http.html)
247+
248+
Users communicate with the application via `forms`, those are fill up sections which where designed on a time before Js where all interactions with the server where made while navigating to a new page. That kind of interaction is **SO** web 1.0 but, we still use `forms`.
249+
250+
- [Forms](http://eloquentjavascript.net/18_forms.html)
251+
252+
253+
### Exercise:
254+
255+
## Day 4 and 5: require('Node.js')
256+
So, at this point you pretty much are up to speed with Js. But Js does not only run on a
257+
browser. **YES** you read me right, you can make a `server`, a `robot`, a `game`, you
258+
can eve run it on an _Arduino_. The sky's the limit.
259+
260+
How is that even possible you ask? Well, Js' community was aways **HUGE**, so it was more than expected that a person asked `Why not?`
261+
That's how [`Node`](https://nodejs.org/en/) was born.
262+
263+
Node.js is a Js runtime that runs outside the browser on a V8 VM, there's a Node fork for almost everything.
264+
265+
So, first, to understand how node works, you need to learn one last thing about Js, `Modules`
266+
267+
- [Modules](http://eloquentjavascript.net/10_modules.html)
268+
269+
Then you can go on with this
270+
- [Node](http://eloquentjavascript.net/20_node.html)
271+
- [What is npm?](https://docs.npmjs.com/getting-started/what-is-npm)
272+
- [Installing npm packages locally](https://docs.npmjs.com/getting-started/installing-npm-packages-locally)
273+
- [Using a `package.json`](https://docs.npmjs.com/getting-started/using-a-package.json)
274+
- [Updating local packages](https://docs.npmjs.com/getting-started/updating-local-packages)
275+
- [Uninstalling local packages](https://docs.npmjs.com/getting-started/uninstalling-local-packages)
276+
- [Installing npm packages globally](https://docs.npmjs.com/getting-started/installing-npm-packages-globally)
277+
- [Updating global packages](https://docs.npmjs.com/getting-started/updating-global-packages)
278+
- [Uninstalling global packages](https://docs.npmjs.com/getting-started/uninstalling-global-packages)
279+
- [Semantic versioning and npm](https://docs.npmjs.com/getting-started/semantic-versioning)
280+
- [How npm works?](https://docs.npmjs.com/how-npm-works/npm3)
281+
282+
### Exercise:
283+
284+
**Notes:**
285+
286+
[index](#index)
287+
288+
# Week 2: TypeScript and Angular 101
289+
290+
### Reading:
291+
292+
## Day 6:
293+
294+
### Exercise:
295+
296+
## Day 7: Unit Testing
297+
298+
### Reading:
299+
300+
301+
### Exercise:
302+
303+
304+
**Notes:**
305+
306+
307+
## Day 8, 9 and 10:
308+
309+
### Reading:
310+
311+
312+
### Exercise:
313+
314+
[index](#index)
315+
316+
# Week 3: Angular 201
317+
318+
### Reading:
319+
320+
### Exercise:
321+
322+
[index](#index)
323+
324+
# Week 4: Angular 301 and stuff
325+
326+
### Reading:
327+
328+
329+
### Exercise:
330+
331+
**Some advices**
332+
333+
## Important:

assets/calendar.png

52 KB
Loading

assets/catch.gif

493 KB
Loading

assets/magic.gif

1.13 MB
Loading

assets/mindblown.gif

4.37 MB
Loading

assets/suspicious.gif

736 KB
Loading

0 commit comments

Comments
 (0)