Angular - The Complete Guide

Master Angular (formerly "Angular 2") and build awesome, reactive web apps with the successor of Angular.js

Start

This course starts from scratch, you neither need to know Angular 1 nor Angular 2!

Angular 9 simply is the latest version of Angular 2, you will learn this amazing framework from the ground up in this course!

Join the most comprehensive, popular and bestselling Angular course and benefit not just from a proven course concept but from a huge community as well!

From Setup to Deployment, this course covers it all! You'll learn all about Components, Directives,Services, Forms, Http Access, Authentication, Optimizing an Angular App with Modules and Offline Compilation and much more - and in the end: You'll learn how to deploy an application!

But that's not all! This course will also show you how to use the Angular CLI and feature a complete project, which allows you to practice the things learned throughout the course!

Angular is one of the pmost modern, performance-efficient and powerful frontend frameworks you can learn as of today. It allows you to build great web apps which offer awesome user experiences! Learn all the fundamentals you need to know to get started developing Angular applications right away.

This course uses TypeScript

TypeScript is the main language used by the official Angular team and the language you'll mostly see in Angular tutorials. It's a superset to JavaScript and makes writing Angular apps really easy. Using it ensures, that you will have the best possible preparation for creating Angular apps. Check out the free videos for more information.

TypeScript knowledge is, however, not required - basic JavaScript knowledge is enough.

Why Angular?

Angular is the next big deal. Being the successor of the overwhelmingly successful Angular.js framework it’s bound to shape the future of frontend development in a similar way. The powerful features and capabilities of Angular allow you to create complex, customizable, modern, responsive and user friendly web applications.

Angular 9 simply is the latest version of the Angular framework and simply an update to Angular 2.

Angular is faster than Angular 1 and offers a much more flexible and modular development approach. After taking this course you’ll be able to fully take advantage of all those features and start developing awesome applications immediately.

Due to the drastic differences between Angular 1 and Angular (=Angular 9) you don’t need to know anything about Angular.js to be able to benefit from this course and build your futures projects with Angular.

Get a very deep understanding of how to create Angular applications

This course will teach you all the fundamentals about modules, directives, components, databinding, routing, HTTP access and much more! We will take a lot of deep dives and each section is backed up with a real project. All examples showcase the features Angular offers and how to apply them correctly.

Specifically you will learn:

  • Which architecture Angular uses
  • How to use TypeScript to write Angular applications
  • All about directives and components, including the creation of custom directives/ components
  • How databinding works
  • All about routing and handling navigation
  • What Pipes are and how to use them
  • How to access the Web (e.g. RESTful servers)
  • What dependency injection is and how to use it
  • How to use Modules in Angular
  • How to optimize your (bigger) Angular Application
  • An introduction to NgRx and complex state management
  • We will build a major project in this course so that you can practice all concepts
  • and so much more!
  • Pay once, benefit a lifetime!

Don’t lose any time, gain an edge and start developing now!

Section: Getting Started

1. Course Introduction (0:57) Preview
2. What is Angular? (1:59) Preview
3. Angular vs Angular 2 vs Latest Version (3:49) Preview
4. Angular Setup & First App (7:31) Preview
5. Join our Online Learning Community (1:00) Preview
6. Editing the First App (10:05) Preview
7. The Course Structure (4:00) Preview
8. How to get the Most out of the Course (2:25) Preview
9. What is TypeScript? (2:09) Preview
10. A Basic Project Setup using Bootstrap for Styling (4:27) Preview
11. Where to find the Course Source Code (1:00) Preview

Section: The Basics

12. Module Introduction (0:56)
13. How an Angular App gets Loaded and Started (7:11) Preview
14. Components are Important! (3:08) Preview
15. Creating a New Component (6:51)
16. Understanding the Role of AppModule and Component Declaration (5:15)
17. Using Custom Components (1:12)
18. Creating Components with the CLI & Nesting Components (3:51)
19. Working with Component Templates (3:08)
20. Working with Component Styles (4:02)
21. Fully Understanding the Component Selector (3:50)
22. Assignment: Component Basics (Problem) (1:33)
23. Assignment: Component Basics (Solution) (6:42)
24. What is Databinding? (2:49)
25. String Interpolation (5:19)
26. Property Binding (6:34)
27. Property Binding vs String Interpolation (3:07)
28. Event Binding (4:09)
29. Passing and Using Data with Event Binding (4:37)
30. Two-Way-Databinding (2:47)
31. Combining all Forms of Databinding (1:46)
32. Assignment: Data & Event Binding (Problem) (1:07)
33. Assignment: Data & Event Binding (Solution) (5:12)
34. Understanding Directives (2:17)
35. Using ngIf to Output Data Conditionally (3:52)
36. Enhancing ngIf with an Else Condition (2:46)
37. Styling Elements Dynamically with ngStyle (5:01)
38. Applying CSS Classes Dynamically with ngClass (2:53)
39. Outputting Lists with ngFor (3:43)
40. Assignment: Directives (Problem) (2:15)
41. Assignment: Directives (Solution) (7:06)
42. Getting the Index when using ngFor (2:52)

Section: Course Project - The Basics

43. Project Introduction (1:04)
44. Planning the App (5:33)
45. Setting up the Application (4:31)
46. Creating the Components (9:32)
47. Using the Components (3:15)
48. Adding a Navigation Bar (5:09)
49. Creating a "Recipe" Model (4:33)
50. Adding Content to the Recipes Components (7:41)
51. Outputting a List of Recipes with ngFor (4:37)
52. Displaying Recipe Details (5:52)
53. Working on the ShoppingListComponent (1:49)
54. Creating an "Ingredient" Model (2:35)
55. Creating and Outputting the Shopping List (2:27)
56. Adding a Shopping List Edit Section (3:28)
57. Wrap Up & Next Steps (0:54)

Section: Debugging

58. Understanding Angular Error Messages (4:36)
59. Debugging Code in the Browser Using Sourcemaps (5:32)
60. Using Augury to Dive into Angular Apps (2:01)

Section: Components & Databinding Deep Dive

61. Module Introduction (0:36)
62. Splitting Apps into Components (5:56)
63. Property & Event Binding Overview (1:44)
64. Binding to Custom Properties (5:43)
65. Assigning an Alias to Custom Properties (1:59)
66. Binding to Custom Events (9:05)
67. Assigning an Alias to Custom Events (0:57)
68. Custom Property and Event Binding Summary (2:02)
69. Understanding View Encapsulation (4:59)
70. More on View Encapsulation (2:43)
71. Using Local References in Templates (4:36)
72. Getting Access to the Template & DOM with @ViewChild (5:02)
73. Projecting Content into Components with ng-content (3:22)
74. Understanding the Component Lifecycle (4:54)
75. Seeing Lifecycle Hooks in Action (11:54)
76. Lifecycle Hooks and Template Access (2:33)
77. Getting Access to ng-content with @ContentChild (3:00)
78. Wrap Up (0:49)
79. Assignment: Components & Databinding (Problem) (2:17)
80. Assignment: Components & Databinding (Solution) (12:21)

Section: Course Project - Components & Databinding

81. Introduction (0:50)
82. Adding Navigation with Event Binding and ngIf (7:31)
83. Passing Recipe Data with Property Binding (4:43)
84. Passing Data with Event and Property Binding (Combined) (10:31)
85. Allowing the User to Add Ingredients to the Shopping List (7:22)

Section: Directives Deep Dive

86. Module Introduction (1:23)
87. ngFor and ngIf Recap (3:36)
88. ngClass and ngStyle Recap (2:56)
89. Creating a Basic Attribute Directive (6:42)
90. Using the Renderer to build a Better Attribute Directive (7:04)
91. Using HostListener to Listen to Host Events (3:00)
92. Using HostBinding to Bind to Host Properties (3:17)
93. Binding to Directive Properties (6:43)
94. What Happens behind the Scenes on Structural Directives (3:04)
95. Building a Structural Directive (6:13)
96. Understanding ngSwitch (2:49)

Section: Course Project - Directives

97. Building and Using a Dropdown Directive (6:25)

Section: Using Services & Dependency Injection

98. Module Introduction (1:39)
99. Why would you Need Services? (2:04)
100. Creating a Logging Service (3:32)
101. Injecting the Logging Service into Components (6:21)
102. Creating a Data Service (6:41)
103. Understanding the Hierarchical Injector (2:40)
104. How many Instances of Service Should It Be? (2:12)
105. Injecting Services into Services (5:13)
106. Using Services for Cross-Component Communication (4:06)
107. Services in Angular 6+ (1:00)
108. Assignment: Services (Problem) (1:44)
109. Assignment: Services (Solution) (9:37)

Section: Course Project - Services & Dependency Injection

110. Introduction (1:23)
111. Setting up the Services (1:15)
112. Managing Recipes in a Recipe Service (4:07)
113. Using a Service for Cross-Component Communication (5:07)
114. Adding the Shopping List Service (5:04)
115. Using Services for Pushing Data from A to B (3:08)
116. Adding Ingredients to Recipes (3:41)
117. Passing Ingredients from Recipes to the Shopping List (via a Service) (7:03)

Section: Changing Pages with Routing

118. Module Introduction (1:26)
119. Why do we need a Router? (1:15)
120. Setting up and Loading Routes (8:01)
121. Navigating with Router Links (5:18)
122. Understanding Navigation Paths (4:54)
123. Styling Active Router Links (5:01)
124. Navigating Programmatically (3:28)
125. Using Relative Paths in Programmatic Navigation (5:09)
126. Passing Parameters to Routes (3:10)
127. Fetching Route Parameters (4:01)
128. Fetching Route Parameters Reactively (7:25)
129. An Important Note about Route Observables (2:42)
130. Passing Query Parameters and Fragments (5:53)
131. Retrieving Query Parameters and Fragments (3:15)
132. Practicing and some Common Gotchas (6:07)
133. Setting up Child (Nested) Routes (4:28)
134. Using Query Parameters - Practice (5:36)
135. Configuring the Handling of Query Parameters (1:50)
136. Redirecting and Wildcard Routes (4:36)
137. Redirection Path Matching (1:00)
138. Outsourcing the Route Configuration (4:40)
139. An Introduction to Guards (1:45)
140. Protecting Routes with canActivate (8:55)
141. Protecting Child (Nested) Routes with canActivateChild (2:51)
142. Using a Fake Auth Service (1:43)
143. Controlling Navigation with canDeactivate (12:28)
144. Passing Static Data to a Route (5:56)
145. Resolving Dynamic Data with the resolve Guard (9:53)
146. Understanding Location Strategies (4:43)
147. Wrap Up (0:51)

Section: Course Project - Routing

148. Planning the General Structure (1:36)
149. Setting Up Routes (7:58)
150. Adding Navigation to the App (1:41)
151. Marking Active Routes (1:31)
152. Fixing Page Reload Issues (2:51)
153. Child Routes: Challenge (1:54)
154. Adding Child Routing Together (4:21)
155. Configuring Route Parameters (6:22)
156. Passing Dynamic Parameters to Links (3:01)
157. Styling Active Recipe Items (1:14)
158. Adding Editing Routes (3:44)
159. Retrieving Route Parameters (3:19)
160. Programmatic Navigation to the Edit Page (4:46)
161. One Note about Route Observables (0:52)
162. Project Cleanup (1:00)

Section: Understanding Observables

163. Module Introduction (4:25)
164. Analyzing Angular Observables (2:15)
165. Getting Closer to the Core of Observables (6:50)
166. Building a Custom Observable (4:46)
167. Errors & Completion (6:39)
168. Observables & You! (1:55)
169. Understanding Operators (8:39)
170. Subjects (8:17)
171. Wrap Up (1:15)
172. Useful Resources & Links (1:00)

Section: Course Project - Observables

173. Improving the Reactive Service with Observables (Subjects) (6:04)

Section: Handling Forms in Angular Apps

174. Module Introduction (1:19)
175. Why do we Need Angular's Help? (2:21)
176. Template-Driven (TD) vs Reactive Approach (1:16)
177. An Example Form (1:32)
178. TD: Creating the Form and Registering the Controls (5:42)
179. TD: Submitting and Using the Form (6:15)
180. TD: Understanding Form State (2:29)
181. TD: Accessing the Form with @ViewChild (3:03)
182. TD: Adding Validation to check User Input (4:14)
183. Built-in Validators & Using HTML5 Validation (1:00)
184. TD: Using the Form State (4:27)
185. TD: Outputting Validation Error Messages (2:23)
186. TD: Set Default Values with ngModel Property Binding (2:15)
187. TD: Using ngModel with Two-Way-Binding (2:48)
188. TD: Grouping Form Controls (3:30)
189. TD: Handling Radio Buttons (3:27)
190. TD: Setting and Patching Form Values (4:42)
191. TD: Using Form Data (4:44)
192. TD: Resetting Forms (1:47)
193. Assignment: Template-driven Forms (Problem) (1:15)
194. Assignment: Template-driven Forms (Solution) (12:17)
195. Introduction to the Reactive Approach (0:40)
196. Reactive: Setup (2:26)
197. Reactive: Creating a Form in Code (4:07)
198. Reactive: Syncing HTML and Form (3:58)
199. Reactive: Submitting the Form (2:15)
200. Reactive: Adding Validation (2:50)
201. Reactive: Getting Access to Controls (3:47)
202. Reactive: Grouping Controls (3:46)
203. Reactive: Arrays of Form Controls (FormArray) (7:31)
204. Reactive: Creating Custom Validators (6:11)
205. Reactive: Using Error Codes (3:20)
206. Reactive: Creating a Custom Async Validator (4:38)
207. Reactive: Reacting to Status or Value Changes (2:11)
208. Reactive: Setting and Patching Values (2:09)
209. Assignment: Reactive Forms (Problem) (1:04)
210. Assignment: Reactive Forms (Solution) (13:48)

Section: Course Project - Forms

211. Introduction (0:59)
212. TD: Adding the Shopping List Form (3:42)
213. Adding Validation to the Form (2:21)
214. Allowing the Selection of Items in the List (4:24)
215. Loading the Shopping List Items into the Form (3:02)
216. Updating existing Items (3:15)
217. Resetting the Form (2:34)
218. Allowing the the User to Clear (Cancel) the Form (1:16)
219. Allowing the Deletion of Shopping List Items (2:52)
220. Creating the Template for the (Reactive) Recipe Edit Form (4:59)
221. Creating the Form For Editing Recipes (5:06)
222. Syncing HTML with the Form (3:52)
223. Adding Ingredient Controls to a Form Array (5:39)
224. Adding new Ingredient Controls (3:38)
225. Validating User Input (5:10)
226. Submitting the Recipe Edit Form (7:30)
227. Adding a Delete and Clear (Cancel) Functionality (4:47)
228. Redirecting the User (after Deleting a Recipe) (1:47)
229. Adding an Image Preview (1:48)
230. Providing the Recipe Service Correctly (1:58)
231. Deleting Ingredients and Some Finishing Touches (3:34)
232. Deleting All Items In A FormArray (1:00)

Section: Using Pipes to Transform Output

233. Introduction & Why Pipes are Useful (2:01)
234. Using Pipes (3:28)
235. Parametrizing Pipes (2:10)
236. Where to learn more about Pipes (1:56)
237. Chaining Multiple Pipes (2:20)
238. Creating a Custom Pipe (6:42)
239. Parametrizing a Custom Pipe (2:36)
240. Example: Creating a Filter Pipe (7:01)
241. Pure and Impure Pipes (or: How to "fix" the Filter Pipe) (4:46)
242. Understanding the "async" Pipe (4:03)
243. Assignment: Pipes (Problem) (1:13)
244. Assignment: Pipes (Solution) (5:10)

Section: Making Http Requests

245. A New IDE (0:43)
246. Module Introduction (1:06)
247. How Does Angular Interact With Backends? (3:09)
248. The Anatomy of a Http Request (2:27)
249. Backend (Firebase) Setup (2:35)
250. Sending a POST Request (10:11)
251. GETting Data (2:56)
252. Using RxJS Operators to Transform Response Data (3:59)
253. Using Types with the HttpClient (5:07)
254. Outputting Posts (2:15)
255. Showing a Loading Indicator (2:03)
256. Using a Service for Http Requests (6:37)
257. Services & Components Working Together (3:28)
258. Sending a DELETE Request (3:27)
259. Handling Errors (6:38)
260. Using Subjects for Error Handling (2:39)
261. Using the catchError Operator (2:13)
262. Error Handling & UX (2:07)
263. Setting Headers (3:18)
264. Adding Query Params (4:01)
265. Observing Different Types of Responses (7:32)
266. Changing the Response Body Type (3:16)
267. Introducing Interceptors (7:24)
268. Manipulating Request Objects (2:32)
269. Response Interceptors (2:46)
270. Multiple Interceptors (4:52)
271. Wrap Up (1:57)
272. Useful Resources & Links (1:00)

Section: Course Project - Http

273. Module Introduction (0:55)
274. Backend (Firebase) Setup (2:03)
275. Setting Up the DataStorage Service (5:32)
276. Storing Recipes (6:39)
277. Fetching Recipes (5:38)
278. Transforming Response Data (4:17)
279. Resolving Data Before Loading (7:31)
280. Fixing a Bug with the Resolver (1:43)

Section: Authentication & Route Protection in Angular

281. Module Introduction (0:52)
282. How Authentication Works (5:01)
283. Adding the Auth Page (6:44)
284. Switching Between Auth Modes (4:02)
285. Handling Form Input (3:44)
286. Preparing the Backend (3:15)
287. Preparing the Signup Request (8:24)
288. Sending the Signup Request (4:36)
289. Adding a Loading Spinner & Error Handling Logic (6:34)
290. Improving Error Handling (5:39)
291. Sending Login Requests (6:00)
292. Login Error Handling (4:28)
293. Creating & Storing the User Data (10:16)
294. Reflecting the Auth State in the UI (9:41)
295. Adding the Token to Outgoing Requests (10:15)
296. Attaching the Token with an Interceptor (8:48)
297. Adding Logout (3:18)
298. Adding Auto-Login (9:55)
299. Adding Auto-Logout (7:39)
300. Adding an Auth Guard (10:56)
301. Wrap Up (1:55)
302. Useful Resources & Links (1:00)

Section: Dynamic Components

303. Module Introduction (1:09)
304. Adding an Alert Modal Component (7:33)
305. Understanding the Different Approaches (2:28)
306. Using ngIf (3:05)
307. Preparing Programmatic Creation (8:27)
308. Creating a Component Programmatically (4:46)
309. Understanding entryComponents (5:06)
310. Data Binding & Event Binding (5:05)
311. Wrap Up (1:25)
312. Useful Resources & Links (1:00)

Section: Angular Modules & Optimizing Angular Apps

313. Module Introduction (0:41)
314. What are Modules? (2:26)
315. Analyzing the AppModule (6:24)
316. Getting Started with Feature Modules (8:59)
317. Splitting Modules Correctly (4:09)
318. Adding Routes to Feature Modules (4:35)
319. Component Declarations (1:58)
320. The ShoppingList Feature Module (4:27)
321. Understanding Shared Modules (8:10)
322. Understanding the Core Module (5:48)
323. Adding an Auth Feature Module (4:22)
324. Understanding Lazy Loading (2:52)
325. Implementing Lazy Loading (12:20)
326. More Lazy Loading (3:02)
327. Preloading Lazy-Loaded Code (3:39)
328. Modules & Services (5:46)
329. Loading Services Differently (8:24)
330. Ahead-of-Time Compilation (9:50)
331. Wrap Up (0:49)
332. Useful Resources & Links (1:00)

Section: Deploying an Angular App

333. Module Introduction (0:52)
334. Deployment Preparation & Steps (3:18)
335. Using Environment Variables (4:44)
336. Example: Deploying to Firebase Hosting (9:01)
337. Server-side Routing vs Client-side Routing (1:00)

Section: Bonus: Working with NgRx in our Project

338. Module Introduction (0:46)
339. What is Application State? (9:07)
340. What is NgRx? (6:55)
341. Getting Started with Reducers (6:44)
342. Adding Logic to the Reducer (5:47)
343. Understanding & Adding Actions (6:16)
344. Setting Up the NgRx Store (4:48)
345. Selecting State (8:51)
346. Dispatching Actions (7:09)
347. Multiple Actions (9:37)
348. Preparing Update & Delete Actions (3:08)
349. Updating & Deleting Ingredients (10:59)
350. Expanding the State (9:17)
351. Managing More State via NgRx (9:52)
352. Removing Redundant Component State Management (3:32)
353. First Summary & Clean Up (5:25)
354. One Root State (11:39)
355. Setting Up Auth Reducer & Actions (8:25)
356. Dispatching Auth Actions (5:53)
357. Auth Finished (For Now...) (6:43)
358. An Important Note on Actions (6:24)
359. Exploring NgRx Effects (3:38)
360. Defining the First Effect (5:19)
361. Effects & Error Handling (8:57)
362. Login via NgRx Effects (9:08)
363. Managing UI State in NgRx (7:30)
364. Finishing the Login Effect (7:11)
365. Preparing Other Auth Actions (4:09)
366. Adding Signup (6:17)
367. Further Auth Effects (6:13)
368. Adding Auto-Login with NgRx (8:16)
369. Adding Auto-Logout (6:31)
370. Finishing the Auth Effects (2:29)
371. Using the Store Devtools (6:20)
372. The Router Store (2:11)
373. Getting Started with NgRx for Recipes (11:03)
374. Fetching Recipe Detail Data (9:14)
375. Fetching Recipes & Using the Resolver (12:00)
376. Fixing the Auth Redirect (2:10)
377. Update, Delete and Add Recipes (15:11)
378. Storing Recipes via Effects (5:52)
379. Cleanup Work (1:58)
380. Wrap Up (2:12)
381. Alternative NgRx Syntax (1:00)
382. Useful Resources & Links (1:00)

Section: Bonus: Angular Universal

383. Module Introduction (3:04)
384. Adding Angular Universal (10:01)
385. Adding Angular Universal with NestJS (6:18)
386. Deploying Angular Universal Apps (1:00)
387. The Remaining Lectures In This Module (1:00)
388. [OPTIONAL] Module Introduction (1:40)
389. [OPTIONAL] Getting Started with Angular Universal (1:31)
390. [OPTIONAL] Working on the App Module (4:02)
391. [OPTIONAL] Adding a Server-Side Build Workflow (4:55)
392. [OPTIONAL] Adding a NodeJS Server (8:26)
393. [OPTIONAL] Pre-Rendering the App on the Server (4:11)
394. [OPTIONAL] Next Steps (1:38)
395. Angular Universal Gotchas (1:00)

Section: Angular Animations

396. Module Introduction (1:03)
397. Setting Up A Starting Project (0:52)
398. Animations Triggers and State (7:11)
399. Switching between States (2:04)
400. Transitions (1:54)
401. Advanced Transitions (5:21)
402. Transition Phases (3:57)
403. The "void" State (6:11)
404. Using Keyframes for Animations (5:32)
405. Grouping Transitions (2:11)
406. Using Animation Callbacks (2:38)

Section: Adding Offline Capabilities with Service Workers

407. Module Introduction (2:09)
408. Adding Service Workers (12:41)
409. Caching Assets for Offline Use (5:28)
410. Caching Dynamic Assets & URLs (7:02)
411. Useful Resources & Links (1:00)

Section: A Basic Introduction to Unit Testing in Angular Apps

412. Introduction (1:18)
413. Why Unit Tests? (2:12)
414. Analyzing the Testing Setup (as created by the CLI) (8:01)
415. Running Tests (with the CLI) (1:59)
416. Adding a Component and some fitting Tests (6:14)
417. Testing Dependencies: Components and Services (6:55)
418. Simulating Async Tasks (9:41)
419. Using "fakeAsync" and "tick" (2:14)
420. Isolated vs Non-Isolated Tests (6:10)
421. Useful Resources & Links (1:00)

Section: Angular as a Platform & Closer Look at the CLI

422. Module Introduction (1:44)
423. A Closer Look at "ng new" (5:18)
424. IDE & Project Setup (2:31)
425. Understanding the Config Files (9:01)
426. Important CLI Commands (5:25)
427. The "angular.json" File - A Closer Look (11:18)
428. Angular Schematics - An Introduction (1:41)
429. The "ng add" Command (4:31)
430. Using Custom "ng generate" Schematics (3:05)
431. Smooth Updating of Projects with "ng update" (2:14)
432. Simplified Deployment with "ng deploy" (5:46)
433. Understanding "Differential Loading" (5:10)
434. Managing Multiple Projects in One Folder (4:35)
435. Angular Libraries - An Introduction (2:51)
436. Wrap Up (1:27)

Section: Course Roundup

437. Roundup (1:33)

Course Instructor

Image

Maximilian Schwarzmüller

As a self-taught professional I really know the hard parts and the difficult topics when learning new or improving on already-known languages. This background and experience enable me to focus on the most relevant key concepts and topics. My track record of many 5-star rated courses, more than 1,000,000 students worldwide as well as a successful YouTube channel is the best proof for that.

The most rewarding experience for me is to see how people find new, better jobs, build awesome web applications, work on amazing projects or simply enjoy their hobby with the help of my content. That's why, together with Manuel Lorenz, I founded Academind to offer the best possible learning experience and to share the pleasure of learning with our students.