$ whois tylerjl ● Infrastructure engineering/devops at Elastic ○ Operations and software dev ● Other pursuits ○ Overwatch Zenyatta main, has a Mork-chi named Morty normal person
Code and documentation ● Remember, optimize for your productivity ● Bear in mind some languages (Java?) will dictate an effective environment (i.e., IntelliJ debugger) ● OS isn’t a hard prerequisite for many authoring options ● Even OS-specific dev technologies (see Docker) are going cross-platform (ish) Writing
Writing CLI ● + ○ Lightweight ○ Composable ● - ○ Features like refactoring ○ Learning curve IDE ● + ○ Featureful ○ Tight language integration ● - ○ Complexity ○ Obfuscation To IDE or not IDE?
Writing Vim ● Verb-like editing ● Standard ● Revitalized with Neovim ● Diverse range of language plugins ● Arcane for beginners ● Feat. like refactoring = poor
Writing Emacs ● Strong, pluggable codebase ● Hotkey-driven ● Equally diverse plugin community as Vim ● Added functionality (IRC, etc.) ● Arcane for beginners ● Feat. like refactoring = poor
Writing Eclipse ● Tight language integration ● Pluggable ● Integrates SCM ● Strong support for langs like Java ● Can become resource hog ● Hides details under the covers
Writing Traditional Tools ● SVN, CVS ○ Remote SCM server ○ Distributed development happens via locking ○ Only relevant pieces checked out Modern Replacements ● Git, Mercurial ○ Server + local components separate ○ Lightweight branching ○ Distributed development ○ De facto OSS winner Source Control
Writing Git, Mercurial ● Native tools aren’t bad ● CLI / IDEs create identical histories; users can collaborate with either ● It’s worthwhile to brush up on the data model to avoid major blowups (Google “the git parable”)
Language + Editor + SCM + … ? ● Language version manager ○ Versions differ significantly, many projects require a specific major version Utilities jenv, sdkman nvm Rvm, rbenv virtualenv stack … ?
Services Why? Where do you: ● Test the software? ● Build the software? ● Run the software? ● Document the software? ● Collaborate on the software? The sad reality: there is no free lunch
Services Collaboration - Cloud GitHub ● De facto OSS repository ● Git (no mercurial) ● Model is pricing for private repos Bitbucket ● Smaller but also popular ● git + mercurial
Databases Services 1. Don’t try and solve Google-sized scaling issues first 2. SQL isn’t uncool 3. It’s all about the shape of your data 4. Know your access patterns 5. SAFETY 6. ??? 7. Profit
Databases Services ● SQL ○ Postgresql, MySQL ○ Not hip, but been around a long time ○ Why are they still relevant? ■ Lots of data is relational! ○ SQLite convenient option for local development ○ Well-documented for self-hosting or hosted (RDS) solutions
Databases Services ● Search ○ Lucene is the grandaddy ○ Solr, Elasticsearch ○ RESTful, JSON-oriented, distributed ○ Useful to make an application: ■ Autocomplete ■ Highlight ■ Real fast
Databases Services ● Other NoSQL ○ MongoDB ■ Easy to get started, scalable ○ Hadoop Ecosystem ■ For really, REALLY big data ■ HDFS, MapReduce, etc. ○ + many more