SlideShare a Scribd company logo
1 of 92
Download to read offline
Youdon’tknowangular@joshj
You.
Don’t.
Know.
Angular.
Youdon’tknowangular@joshj
#01
Mobile Architect //
Transamerica
Mobile Architect,
Entrepreneur, FPV
Pilot & Whiskey Fan.
INTR.
ODU.
CTI.
ON.
Youdon’tknowangular@joshj
You.
Don’t.
Know.
Angular.
Youdon’tknowangular@joshj
Youdon’tknowangular@joshj
Money comes raining
down and life is as it
should be…
Youdon’tknowangular@joshj
Usually it’s this…
Youdon’tknowangular@joshj
Youdon’tknowangular@joshj
Architecture.
“…in the end, architecture boils down to
whatever the important stuff is.”
- Martin Fowler
Youdon’tknowangular@joshj
Architecture.
“the decisions that are hard to change”
Youdon’tknowangular@joshj
Architecture.
• Code Craftsmanship
• Flow Strategies
• I/O Strategies
• Readability
Youdon’tknowangular@joshj
Think Like an
Architect.
Youdon’tknowangular@joshj
Youdon’tknowangular@joshj
Craftsmanship
Code
Youdon’tknowangular@joshj
Code.
Crafts.
man.
ship.
Find ways to love the code you
are working on.
Youdon’tknowangular@joshj
Build a working document your
team can get behind.
Code.
Crafts.
man.
ship.
Youdon’tknowangular@joshj
If you have a team: Have
training / idea sharing times.
(If not, take a class)
Code.
Crafts.
man.
ship.
Youdon’tknowangular@joshj
Be a Zen Master Architect.
Code.
Crafts.
man.
ship.
Youdon’tknowangular@joshj
FlowStrategies
#03
Youdon’tknowangular@joshj
Nomenclature
Almost anything can be a service. A service is typically a class with a narrow,
well-defined purpose. It should do something specific and do it well.
Service
The component or set of methods that will be using our service.
Consumer
Youdon’tknowangular@joshj
Bicycle Wheel
Flow.
stra.
teg.
ies.
Youdon’tknowangular@joshj
Bicycle Wheel
Service
Flow.
stra.
teg.
ies.
Youdon’tknowangular@joshj
Bicycle Wheel
Service
Consumers
Flow.
stra.
teg.
ies.
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
export	class	Logger	{	
		log(msg:	any)			{	console.log(msg);	}	
		error(msg:	any)	{	console.error(msg);	}	
		warn(msg:	any)		{	console.warn(msg);	}	
}Service
Consumer
export	class	HeroService	{	
		private	heroes:	Hero[]	=	[];	
		constructor(	
				private	backend:	BackendService,	
				private	logger:	Logger	
		)	{}	
		getHeroes()	{	
				this.backend.getAll(Hero).then(	(heroes:	Hero[])	=>	{	
						this.logger.log(`Fetched	${heroes.length}	heroes.`);	
						this.heroes.push(...heroes);	//	fill	cache	
				});	
				return	this.heroes;	
		}	
}
Youdon’tknowangular@joshj
Bicycle Wheel
Service
Consumers
Flow.
stra.
teg.
ies.
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
Bicycle Wheel
Service
Consumers
Consumers
Consumers
Consumers
Consumers
Consumers
Youdon’tknowangular@joshj
Bicycle Wheel
Flow.
stra.
teg.
ies.
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
import	{	NgModule	}						from	'@angular/core';	
import	{	BrowserModule	}	from	'@angular/platform-browser';	
@NgModule({	
		imports:						[	BrowserModule	],	
		providers:				[	Logger	],	
		declarations:	[	AppComponent	],	
		exports:						[	AppComponent	],	
		bootstrap:				[	AppComponent	]	
})	
export	class	AppModule	{	}
Service
Youdon’tknowangular@joshj
Bicycle Wheel
Flow.
stra.
teg.
ies.
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
Bicycle Wheel
Youdon’tknowangular@joshj
Waterfall
Flow.
stra.
teg.
ies.
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
Youdon’tknowangular@joshj
Waterfall
ServiceFlow.
stra.
teg.
ies.
Youdon’tknowangular@joshj
Service NavControllerFlow.
stra.
teg.
ies.
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
Youdon’tknowangular@joshj
Don’t Use Events(Unless you absolutely have to…)
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
Waterfall
Service NavController
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
Waterfall
Service
Consumer
NavController
PageComponent
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
Waterfall
Service
Consumer
Consumer Child
NavController
PageComponent
ButtonComponent
Youdon’tknowangular@joshj
@Injectable()	
export	class	NavigationService	{	
		public	navigate()	{	
				//	Do	something	
		}	
}
Service
Youdon’tknowangular@joshj
@Injectable()	
export	class	NavigationService	{	
		public	navigate()	{	
				//	Do	something	
		}	
}
export	class	MyPageComponent		{	
		constructor	(	
				public	navigationService:	NavigationService	
		)	{}	
}
<nav-button	[navigationService]="navigationService">
Service
Consumer
Youdon’tknowangular@joshj
@Injectable()	
export	class	NavigationService	{	
		public	navigate()	{	
				//	Do	something	
		}	
}
export	class	MyPageComponent		{	
		constructor	(	
				public	navigationService:	NavigationService	
		)	{}	
}
export	class	NavButtonComponent		{	
		@Input()	navigationService:	NavigationService;	
		onButtonClick()	{	
				this.navigationService.navigate();	
	}	
}
<nav-button	[navigationService]="navigationService">
Service
Consumer
Consumer Child
Youdon’tknowangular@joshj
import	{	NavigationService	}	from	'./shared/navigation.service';	
@Component({	
		selector:	'nav-button',	
		template:	`<button	(click)="navigationService.navigate()">Navigate</button>`	
})	
export	class	NavButtonComponent		{	
		@Input()	navigationService:	NavigationService;	
}
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
Waterfall
Service
Consumer
Consumer Child
NavController
PageComponent
ButtonComponent
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
The Molecule
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
https://angular-realworld.stackblitz.io
Modular
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
https://angular.io/guide/ngmodule
NgModules
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
Functional
Blocks
Shared
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
Shared
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies. export	*	from	'./article-helpers';	
export	*	from	'./buttons';	
export	*	from	'./layout';	
export	*	from	'./list-errors.component';	
export	*	from	'./models';	
export	*	from	'./services';	
export	*	from	'./shared.module';	
export	*	from	'./show-authed.directive';
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
import	{	ArticleListComponent	}	from	'../shared';
import	{	ArticleListComponent	}	from	'../shared/article-
helpers/article-list.component';
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
Module
Folder
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
• Organized
• Easy to reference
• Self contained
• Safer for teams
Benefits
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
Module
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
NgAppModule
import	{	NgModule	}	from	'@angular/core';	
import	{	BrowserModule	}	from	'@angular/platform-browser';	
import	{	FormsModule	}	from	'@angular/forms';	
import	{	AppComponent	}	from	'./app.component';	
import	{	HelloComponent	}	from	'./hello.component';	
import	{	NavButtonComponent	}	from	'./nav-
button.component';	
@NgModule({	
		imports:						[	BrowserModule,	FormsModule	],	
		declarations:	[	AppComponent,	HelloComponent,	
NavButtonComponent],	
		bootstrap:				[	AppComponent	]	
})	
export	class	AppModule	{	}
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies. Imports
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
Imports
@NgModule({	
		imports:						[	BrowserModule,	FormsModule	],	
		declarations:	[	AppComponent,	HelloComponent,	
NavButtonComponent],	
		bootstrap:				[	AppComponent	]	
})	
export	class	AppModule	{	}
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
Imports
import	{	ArticleModule	}	from	'./article/article.module';	
@NgModule({	
		declarations:	[],					
		imports:	[	
				ArticleModule,	
		],	
		providers:	[],	
		bootstrap:	[AppComponent]	
})	
export	class	AppModule	{	}
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
import	{	ModuleWithProviders,	NgModule	}	from	'@angular/
core';	
import	{	RouterModule	}	from	'@angular/router';	
import	{	ArticleComponent	}	from	'./article.component';	
import	{	ArticleCommentComponent	}	from	'./article-
comment.component';	
import	{	ArticleResolver	}	from	'./article-
resolver.service';	
import	{	MarkdownPipe	}	from	'./markdown.pipe';	
import	{	SharedModule	}	from	'../shared';
article.module.ts
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
const	articleRouting:	ModuleWithProviders	=	
RouterModule.forChild([	
		{	
				path:	'article/:slug',	
				component:	ArticleComponent,	
				resolve:	{	
						article:	ArticleResolver	
				}	
		}	
]);
article.module.ts
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
@NgModule({	
		imports:	[	
				articleRouting,	
				SharedModule	
		],	
		declarations:	[	
				ArticleComponent,	
				ArticleCommentComponent,	
				MarkdownPipe	
		],	
		providers:	[	
				ArticleResolver	
		]	
})	
export	class	ArticleModule	{}	
article.module.ts
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
https://angular.io/guide/ngmodule
NgModules
Youdon’tknowangular@joshj
Flow.
stra.
teg.
ies.
https://angular-realworld.stackblitz.io
Molecule
Youdon’tknowangular@joshj
I/O Stratagies.
Youdon’tknowangular@joshj
#01
Whenever data
enters or leaves the
application have a
strategy for hiding
the source or the
target from the
application as a
whole.
I/O
Stratagies.
Youdon’tknowangular@joshj
I/O Stratagies.
Youdon’tknowangular@joshj
I/O Stratagies.
Components
Services
Adapters
Youdon’tknowangular@joshj
I/O.
stra.
teg.
ies.
Article Component http()
Youdon’tknowangular@joshj
I/O.
stra.
teg.
ies.
Article Component
Article Service http()
getArticles()
Youdon’tknowangular@joshj
I/O.
stra.
teg.
ies.
Article Component
API Service http()
getArticles()
this.apiService.get()Article Service
Youdon’tknowangular@joshj
I/O.
stra.
teg.
ies.
Article Component
ApiService
apiHttpStrategy
getArticles()
this.apiService.get()Article Service
apiFileStrategy
API Service
Youdon’tknowangular@joshj
@NgModule({	
		declarations:	[	
		],	
		imports:	[	
		],	
		providers:	[	
				{	
						provide:	ApiService,	
						useFactory:	(http:	Http,	jwtService:	JwtService)	=>	{	
								if	(environment.production)	{	
										return	new	ApiService(http,	jwtService);	
								}	else	{	
										return	new	MockApiService(http,	jwtService);	
								}	
						},	
						deps:	[Http,	JwtService]	
				}	
		],	
		bootstrap:	[AppComponent]	
});	
I/O.
stra.
teg.
ies.
Youdon’tknowangular@joshj
I/O Stratagies.
Components
Services
Adapters
Youdon’tknowangular@joshj
I/O.
stra.
teg.
ies.
Article Component http()
Youdon’tknowangular@joshj
I/O.
stra.
teg.
ies.
Article Component
Analytics Service http()
event()
Youdon’tknowangular@joshj
I/O.
stra.
teg.
ies.
Article Component
Analytics Service event()
this.analytics.event()
Google Strategy http()
Youdon’tknowangular@joshj
I/O.
stra.
teg.
ies.
Article Component
Analytics Service
Crashlytics Firebase
event()
this.analytics.event()
Youdon’tknowangular@joshj
export	class	AnalyticsService	{	
		private	strategies:	Array<any>	
		constructor(	
				private	crashlyticsAnalytics:	CrashlyticsAnalyticsService,	
				private	firebaseAnalyticsService:	FirebaseAnalyticsService,	
				private	googleAnalyticsService:	GoogleAnalyticsService	
		)	{	
				this.strategies	=	[	
						crashlyticsAnalytics,	
						firebaseAnalyticsService,	
						googleAnalyticsService	
				]	
		};	
		public	event()	{	
				for	(let	strategy	of	this.strategies)	{	
						strategy.event();	
				}	
		};	
}
Youdon’tknowangular@joshj
I/O Stratagies.
Youdon’tknowangular@joshj
Readability
Youdon’tknowangular@joshj
“Any fool can write code that a
computer can understand. Good
programmers write code that humans
can understand.”
Martin Fowler
Youdon’tknowangular@joshj
I/O.
stra.
teg.
ies.
The rule of
“huh”
Youdon’tknowangular@joshj
I/O.
stra.
teg.
ies.
L.I.F.T
• Locate
• Identify
• Flat
• Try to be DRY
Youdon’tknowangular@joshj
I/O.
stra.
teg.
ies.
Import line spacing
import	{	Injectable	}	from	'@angular/core';	
import	{	Http	}							from	'@angular/http';	
import	{	Hero	}	from	'./hero.model';	
import	{	ExceptionService}	from	'../../core';
Youdon’tknowangular@joshj
I/O.
stra.
teg.
ies.
Component
Selector
Names
selector:	'toh-hero-button',
<toh-hero-button></toh-hero-button>
Youdon’tknowangular@joshj
I/O.
stra.
teg.
ies.
Don’t Abbreviate your
constructor arguments or
instantiated classes.
constructor(	
				private	navigationService:	NavigationService,	
				private	myElementReference:	MyElementReference	
)	{	
				this.fooAwesome	=	new	FooAwesome();	
};
Youdon’tknowangular@joshj
I/O.
stra.
teg.
ies.
Remember:

A bad Function Name
can put you in
aFunc();
Youdon’tknowangular@joshj
I/O.
stra.
teg.
ies.
constructor(	
				private	navServ:	NavigationService,	
				private	el:	MyElementReference	
)	{	
				this.foo	=	new	FooAwesome();	
};	
No…
Youdon’tknowangular@joshj
I/O.
stra.
teg.
ies.
Small Functions
		private	specificTask()	{	
				var	doSomethingWell	=	true;	
				var	doSomethingSpecific	=	true;	
				return	(doSomethingWell	&&	doSomethingSpecific);	
		}
Youdon’tknowangular@joshj
I/O.
stra.
teg.
ies.
Use a Code Tool
Youdon’tknowangular@joshj
I/O.
stra.
teg.
ies.
Use Semicolons;
seriously.
Youdon’tknowangular@joshj
Think Like an
Architect.
Youdon’tknowangular@joshj
END.
@joshj //
joshjensen.com

More Related Content

Recently uploaded

Abortion Pills For Sale WhatsApp[[+27737758557]] In Birch Acres, Abortion Pil...
Abortion Pills For Sale WhatsApp[[+27737758557]] In Birch Acres, Abortion Pil...Abortion Pills For Sale WhatsApp[[+27737758557]] In Birch Acres, Abortion Pil...
Abortion Pills For Sale WhatsApp[[+27737758557]] In Birch Acres, Abortion Pil...
drm1699
 
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Lisi Hocke
 

Recently uploaded (20)

OpenChain Webinar: AboutCode and Beyond - End-to-End SCA
OpenChain Webinar: AboutCode and Beyond - End-to-End SCAOpenChain Webinar: AboutCode and Beyond - End-to-End SCA
OpenChain Webinar: AboutCode and Beyond - End-to-End SCA
 
Abortion Pill Prices Jane Furse ](+27832195400*)[ 🏥 Women's Abortion Clinic i...
Abortion Pill Prices Jane Furse ](+27832195400*)[ 🏥 Women's Abortion Clinic i...Abortion Pill Prices Jane Furse ](+27832195400*)[ 🏥 Women's Abortion Clinic i...
Abortion Pill Prices Jane Furse ](+27832195400*)[ 🏥 Women's Abortion Clinic i...
 
Rapidoform for Modern Form Building and Insights
Rapidoform for Modern Form Building and InsightsRapidoform for Modern Form Building and Insights
Rapidoform for Modern Form Building and Insights
 
From Theory to Practice: Utilizing SpiraPlan's REST API
From Theory to Practice: Utilizing SpiraPlan's REST APIFrom Theory to Practice: Utilizing SpiraPlan's REST API
From Theory to Practice: Utilizing SpiraPlan's REST API
 
Abortion Pills For Sale WhatsApp[[+27737758557]] In Birch Acres, Abortion Pil...
Abortion Pills For Sale WhatsApp[[+27737758557]] In Birch Acres, Abortion Pil...Abortion Pills For Sale WhatsApp[[+27737758557]] In Birch Acres, Abortion Pil...
Abortion Pills For Sale WhatsApp[[+27737758557]] In Birch Acres, Abortion Pil...
 
Automate your OpenSIPS config tests - OpenSIPS Summit 2024
Automate your OpenSIPS config tests - OpenSIPS Summit 2024Automate your OpenSIPS config tests - OpenSIPS Summit 2024
Automate your OpenSIPS config tests - OpenSIPS Summit 2024
 
Abortion Clinic In Johannesburg ](+27832195400*)[ 🏥 Safe Abortion Pills in Jo...
Abortion Clinic In Johannesburg ](+27832195400*)[ 🏥 Safe Abortion Pills in Jo...Abortion Clinic In Johannesburg ](+27832195400*)[ 🏥 Safe Abortion Pills in Jo...
Abortion Clinic In Johannesburg ](+27832195400*)[ 🏥 Safe Abortion Pills in Jo...
 
A Deep Dive into Secure Product Development Frameworks.pdf
A Deep Dive into Secure Product Development Frameworks.pdfA Deep Dive into Secure Product Development Frameworks.pdf
A Deep Dive into Secure Product Development Frameworks.pdf
 
From Knowledge Graphs via Lego Bricks to scientific conversations.pptx
From Knowledge Graphs via Lego Bricks to scientific conversations.pptxFrom Knowledge Graphs via Lego Bricks to scientific conversations.pptx
From Knowledge Graphs via Lego Bricks to scientific conversations.pptx
 
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
[GeeCON2024] How I learned to stop worrying and love the dark silicon apocalypse
 
Encryption Recap: A Refresher on Key Concepts
Encryption Recap: A Refresher on Key ConceptsEncryption Recap: A Refresher on Key Concepts
Encryption Recap: A Refresher on Key Concepts
 
BusinessGPT - Security and Governance for Generative AI
BusinessGPT  - Security and Governance for Generative AIBusinessGPT  - Security and Governance for Generative AI
BusinessGPT - Security and Governance for Generative AI
 
Abortion Pill Prices Germiston ](+27832195400*)[ 🏥 Women's Abortion Clinic in...
Abortion Pill Prices Germiston ](+27832195400*)[ 🏥 Women's Abortion Clinic in...Abortion Pill Prices Germiston ](+27832195400*)[ 🏥 Women's Abortion Clinic in...
Abortion Pill Prices Germiston ](+27832195400*)[ 🏥 Women's Abortion Clinic in...
 
Transformer Neural Network Use Cases with Links
Transformer Neural Network Use Cases with LinksTransformer Neural Network Use Cases with Links
Transformer Neural Network Use Cases with Links
 
The mythical technical debt. (Brooke, please, forgive me)
The mythical technical debt. (Brooke, please, forgive me)The mythical technical debt. (Brooke, please, forgive me)
The mythical technical debt. (Brooke, please, forgive me)
 
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
Team Transformation Tactics for Holistic Testing and Quality (NewCrafts Paris...
 
Effective Strategies for Wix's Scaling challenges - GeeCon
Effective Strategies for Wix's Scaling challenges - GeeConEffective Strategies for Wix's Scaling challenges - GeeCon
Effective Strategies for Wix's Scaling challenges - GeeCon
 
Prompt Engineering - an Art, a Science, or your next Job Title?
Prompt Engineering - an Art, a Science, or your next Job Title?Prompt Engineering - an Art, a Science, or your next Job Title?
Prompt Engineering - an Art, a Science, or your next Job Title?
 
Abortion Pill Prices Turfloop ](+27832195400*)[ 🏥 Women's Abortion Clinic in ...
Abortion Pill Prices Turfloop ](+27832195400*)[ 🏥 Women's Abortion Clinic in ...Abortion Pill Prices Turfloop ](+27832195400*)[ 🏥 Women's Abortion Clinic in ...
Abortion Pill Prices Turfloop ](+27832195400*)[ 🏥 Women's Abortion Clinic in ...
 
The Strategic Impact of Buying vs Building in Test Automation
The Strategic Impact of Buying vs Building in Test AutomationThe Strategic Impact of Buying vs Building in Test Automation
The Strategic Impact of Buying vs Building in Test Automation
 

Featured

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 

Featured (20)

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 

DevNexus 2018 - You Don't Know Angular