Full Stack Journey Episode #009: Jake Robinson

This episode is a very special episode of the Full Stack Journey podcast, recorded live at the Dallas-Ft. Worth VMUG UserCon on Thursday, September 29, 2016. This special episode continues our series of looking at individual technologies that are necessary steps along the “full-stack journey.” Joining Scott on this episode is Jake Robinson (@jakerobinson on Twitter as well as on GitHub), an automation specialist at VMware, Inc. Naturally, the conversation centers on automation, why automation is important, and getting started with automation.

The podcast episode is available via iTunes, or you can listen directly in your browser (assuming your browser supports HTML5 audio):

Enough introductions, let’s jump right in!

Show Notes

  • Jake is a development manager for Project Zombie, an orchestration framework that drives a lot of the automation behind VMware’s vCloud Air service.
  • Having automation is important, but scale of one’s learning ability is also important.
  • The rise of the software-defined data center has also given rise to a new archetype, the “data center developer,” who leverages automation tools, APIs, scripting languages, etc., to programmatically define and orchestrate resources within a software-defined data center.
  • Automation is driven by business needs—to move more quickly, to stay ahead of the competition. The business needs demand that we (IT professionals) are able to deliver software and/or infrastructure more quickly and more consistently.
  • Jake finds that learning happens best when centered around a “problem,” a key thing you’re trying to solve. This is especially true for automation and/or learning programming/scripting languages.
  • PowerCLI is an outstanding interface to vSphere, and offers a really easy learning curve for folks getting started in automation.
  • Running reports–like listing all the VMs in your environment, or something similar—is a useful way to get started with PowerCLI.
  • So how does one help build “programmatic thinking” skills?
    • CodeAcademy is a good tool you can use to interactively play with various languages, and allows you to build your “programmatic thinking” skills.
    • Scratch is another tool, oriented a bit more towards children, that can be used to help build “programmatic thinking” skills. The board game Robot Turtles is another tool (again oriented toward children).
    • Using these kid-centric tools offers a secondary purpose as well: it helps encourage your kids to be involved in developing these sorts of skills in a way that also helps promote work-life balance.
  • It’s OK to admit you don’t know something, and ask the “dumb question.” You just have to be brave enough to ask the question.
  • IFTTT.com is another, easy-to-use way to build programmatic thinking and incorporating automation into your regular workflows.
  • Learning automation doesn’t necessarily have to be data center-focused.
  • Along the lines of “low-hanging fruit” that listeners can tackle as an easy first project, reports (as mentioned earlier) are a great way to get started.
    • Start with simple reports on your VMs.
    • Then add more information.
    • Next, add some formatting of the output.
    • You can then have the report delivered to you via e-mail on a regular basis.
    • As you can see, you can start small and build upon your success as you go.
  • Digging into other peoples’ code can be helpful in your own learning journey.
  • While your early code doesn’t have to be perfect, you do have to balance the accrual of technical debt.
    • Don’t have expectations that are too high for your early code projects. Every task you automate is a learning process, and your code will get better over time.
    • Set reasonable goals for yourself.
    • It can be helpful to break a larger problem down into a number of smaller problems. This goes back to “programmatic thinking” (being able to break a problem down into the steps required to fix a problem).
  • DRY = Don’t Repeat Yourself
  • Don’t expect to write perfectly DRY code in the beginning—give yourself room to learn and get better over time.
  • For Jake, learning the language was the easy part, and those skills tend to apply themselves to other programming languages. The hard part was the associated “tooling” that accompanies a language.
  • Practice, practice, practice—it’s the only way to get better. There’s no easy road. It will take effort in order to improve.
  • Other tools that might be helpful:
    • Online communities (don’t be afraid to ask the “dumb” questions!) are a good resource.
    • When it comes to communities, you’ll get out of it what you put into it.
    • In-person meetups can also be helpful.
  • Keep in mind that automation takes many forms—not just scripting.
  • Determine the right tool to use, and then you can find resources to help learn/use that tool.
  • What is the best tool to use/learn? “It depends.” Of course! A few resources that Jake likes:
    • Puppet is a good tool for managing desired state of a node.
    • Maybe combine a tool like Ansible (for orchestrating multiple tasks) and Puppet for managing node state.
    • Of course, there’s also PowerCLI, as mentioned earlier.
  • If you’re new to “programmatic thinking,” use some of the tools described earlier to help build those skills.
  • If you’re familiar with a scripting language, push yourself to learn a new language, new tool, or new framework.