## `$ whoami`
- Marco Oliveira - [twitter.com/sonicspot](https://twitter.com/sonicspot)
- Baboom Limited CTO - [baboom.com](http://baboom.com)
- Indigo United co-founder - [IndigoUnited.com](http://indigounited.com)
- opoJS founder - [opoJS.com](http://opojs.com)
- Open-source advocate and contributor to a few projects.
- Developing for the web for more than 10 years.
Note:
- HTML websites
- Flash
- backend development (PHP)
- currently frontend and backend (JS and NodeJS)
## Web Matters
Note:
- Colleagues think.
- Parents think.
- What I really do.
I know... It's awesome, right?
## Web development SUCKS!
Note:
- Lower class of software development
> Aw... That's cool, but I prefer developing real software...
![dafuq](img/dafuq.jpg)![Are you kidding me?](img/are-you-kidding.png)![dafuq](img/true-story.png)
## What is real software?
- Will call it **web / non-web**.
- What's the difference?
- Not inside the browser?
Note:
- Desktop: Haroopad, Macaw, Atom
- Mobile: BBC Olympics
- Robots: https://www.youtube.com/watch?v=FR_QOxGsRz0
- 3D games: https://blog.mozilla.org/blog/2014/03/12/mozilla-and-epic-preview-unreal- engine-4-running-in-firefox/
- Accounting: https://twitter.com/pgte/status/452367467776860160/photo/1
- Can anyone guess the technology used to develop this?
![Desktop](img/atom.png)![Mobile](img/mobile.png)
- All developed using web technologies.
- node-webkit
- phonegap
- NodeJS
- WebGL
## STIGMATA
- *interpreted vs compiled*
- compiled is FASTER!
- True most of the times.
- Doesn't matter most of the times.
- Programmers are not perfect, and demanding technologies lead to poor solutions.
- Slower & harder to maintain.
Note:
- Lots of successful companies rely on web technologies.
- Paypal
- eBay
- LinkedIn
- Wallmart
- If good enough for them, good enough for you!
### Metrics
- Raw performance.
- Development time.
- Licensing.
- Security.
- Resilience.
- Maintainability.
- Many others depending on the project.
Note:
Raw performance is only one of the several metrics for software development.
Most software, even "non-web" software, relies on web technologies.
- JSON (JavaScript Object Notation)
- REST APIs
- Web evolved from websites into applications
- (Facebook, Twitter, Baboom :D)
- Easy & fast deploy.
- No need to install, just visit the website.
- Cross platform.
- Interaction and design usually more appealing.
Note:
- Danger to become awesome and face a problem most non-web does not face.
## Scale
- Most "non-web" software runs on a single machine.
- Web has many servers and even more clients.
- Applications grow fast.
- Time to shine for software architects.
Note:
- application needs to scale.
- Social applications suffer from thi.
- Growth spikes can make or break your application.
- Requires careful thought and engineering.
- Time to shine for software architects.
- Driving force for birth and maturing of many technologies.
- NoSQL (Couchbase, CouchDB, MongoDB).
- Fulltext search engines (ElasticSearch, Solr, SphinxSearch).
- Web servers and caching servers (Nginx, G-WAN, Varnish).
Note:
- Having a unified work force in terms of technologies can help you manage your resources.
## Lingua Franca
### JavaScript
### **DISCLAIMER:** I was not always a JavaScript fan.
- Typically associated with poorly written code.
- Strange variable scope.
- Spaghetti code.
- Callback hell.
- You can mess with the prototypes of native Objects.
- Has lots of **WTF**'s. [wtfjs.com](http://wtfjs.com)
Note:
`Array(16).join('wtf' - 1) + ' batman'` by Gary Bernhardt in [WAT](https://www.destroyallsoftware.com/talks/wat)
On the other hand,
- Very expressive.
- Not verbose.
- Asynchronous.
Several characteristics make JavaScript a fantastic language to use everywhere.
### Atwood's Law
> Any application that can be written in JavaScript, will eventually be written in JavaScript.
## Enter NodeJS
- JavaScript outside of the browser.
- Platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications.
- event-driven, non-blocking I/O model
- perfect for data-intensive real-time applications that run across distributed devices.
### Fantastic... What does it mean?
- Your code is single threaded.
- Single event at a time.
- Much easier to develop highly concurrent software.
Note:
- Who knows what NodeJS is?
- Who has used NodeJS?
- Who is using it right now? Did I mention we are hiring?
## Live coding
(always works out great)
- No longer division between *web and non-web* software.
- Don't use web just because, but don't ignore it as well.
Thanks!
@sonicspot