January 11th: Ubud, Bali
"All life is an experiment. The more experiments you make, the better."
Ralph Waldo Emerson
For the next nine weeks, this blog will adopt a decidedly different flavor compared to my previous travel writing. During this time I'll be a student at Ruby On The Beach bootcamp, learning software development while living in Ubud, the cultural and artistic capital of Bali, Indonesia. This is ultimately an intellectual experiment in pushing the limits of what I'm mentally capable of, and I'm excited for what's to come.
Immediately upon arrival, it quickly became clear that this wouldn't be a typical tech bootcamp experience. For starters, accommodation, as well as access to a delightful bamboo co-working space steps away from our classroom, is included in the cost of the program. How much would this villa run you in Silicon Valley?
For the last week, I've slowly been growing accustomed to returning to a regular working schedule and re-calibrating my brain to think like a computer programmer. However, the course has been structured much differently than I anticipated. As opposed to working 12 hours a day and cramming material into our brains as quickly as possible, Ruby On The Beach is founded under the principle of avoiding burnout. By taking a comfortable pace through the curriculum, taking frequent breaks to let information percolate, and starting with yoga class three days a week, class so far is legitimately delightful.
As our fearless leader Dan reminded us during a morning stand-up session, every concern and fear we have while coding must be appended by two words: in Bali. As in, "I'm getting really confused by this utterly impossible assignment....in Bali." This mindset puts everything into perspective; take in the gorgeous surroundings and don't get too worked up because you will figure out the solution eventually. So far, the most spectacular aspect of the class is the people. My fellow students hail from all corners of the globe and each one brings unique experiences and perspectives to the table. Our instructors have infectious positive attitudes and the bootcamp's 4:1 student to teacher ratio means an experienced and knowledgeable code monkey is never more than a shout away.
Becoming proficient in Ruby on Rails, a popular software framework for developing web applications, won't be an easy undertaking; there's a lot of ground to cover over the next two months. While taking Coursera's wildly popular Learning How To Learn to prepare for the class, one big takeaway was that if you can distill a complicated topic into segments simple enough to teach anyone, it becomes much easier to retain concepts. To quote Barbara Oakley's fantastic A Mind for Numbers, "when you cultivate simple explanations by breaking down complicated material to its key elements, the result is that you have a deeper understanding of the material."For the duration of the class, I'll take one seemingly complicated concept we learned each week and try to make it simple, right here on the blog. Although this week we dove into version control using Git and even wrote our first programs in the Ruby programming language, I'll start with something devastatingly simple: the command line interface.
Unless you're a designer or developer, it's unlikely that you've ever opened the command line interface on your computer on purpose. But until the invention of the GUI (graphical user interface) this is how everyone interacted with computers! On the Mac operating system, it's called the Terminal and looks something like this:
Huh? Yea, most students in class were befuddled and intimidated by this screen on Monday morning, yet by the end of the week we were all well versed in the powerful (and potentially destructive) applications of the Terminal.
If you're unfamiliar with the Terminal but comfortable with a Mac, an easy comparator is Finder's file management system. Compare the two shots below:
Notice the similarity? The first shot is the Finder's display of the root folder on my computer, whereas the second picture shows what happens when you run the ls -l (ls = list, -l = long form) command of the same root folder from the terminal.
When properly manipulated using commands, the terminal becomes an easy and convenient way to create new folders and file systems. In the example below, I created a new folder for my Blog Content (mkdir Blog_Content), moved to that folder (cdBlog_Content), created two additional Folders for images and text (mkdir images, mkdir text), moved to the text folder (cd text), then created a text file for this post (touch ROTB_Week1.txt)
For comparison, here is how the outcome is demonstrated in Finder.
Boom...now you know how to make folders and files using your command line interface! Exciting, isn't it? Ok, not exactly. But while laying the foundation for more complicated applications and concepts, you have to crawl before you can run. Check back next week to learn something else about computer programming!