Thoughts on ‘The Good Parts of JavaScript and the Web’ by Douglas Crockford

I’ve set aside some time to take some online courses at FrontendMasters to deepen my understanding of various engineering principles as a personal continuing education goal. While taking courses I focus by taking notes, and figured I may as well share them with the world, so welcome to the Learning Series!

The first course is The Good Parts of Javascript and the Web, by Douglas Crockford. The course description is as follows: “In this course, you will learn the history of JavaScript, the details of the language, with particular attention to functions, which is where the power of the JavaScript language is hidden. There is also an overview of how browsers work, how servers work, and security.”

This writeup got a little long because I found so much of the course interesting, so here’s an outline – feel free to jump to the bits you find interesting:

Introduction and Background

Douglas Crockford is the author of the classic title from 2008 that many refer to as the go-to introduction to the JavaScript language: ‘JavaScript: The Good Parts‘. At the time, many classic developers complained about the backward ways of JS, but he wanted to point out the good parts. He’s also the author and maintainer of JSLint since 2002 (the first JavaScript syntax checker) ando behind JSON – he coined the acronym (though wishes now he thought of something better) and was involved in popularizing the data format.

For those that are excited about licenses and things, Crockford also famously used the MIT license in his tools but with a slight modification: He adds the line “The Software shall be used for Good, not Evil“. This is part of the licensing in JSLint as well as JSON. Yay for Good, is your JSON used for Good?

JSLint

JSLint is a static code analysis tool used for checking if JavaScript source code complies with certain coding rules. Douglas states that JSLint “will hurt your feelings”. As linting tools goes, it’s fairly opinionated but in his course he explains many of the reasons for these strong opinions which in his opinion are backed by data and a philosophy that:

If there is a feature of a language that is sometimes problematic, and if it can be replaced with another feature that is more reliable, then always use the more reliable feature.

Good use of coding style can reduce errors, so JSLint helps us to prefer forms of writing code that are error resistant. For example, the roman language initially was all caps and had no punctuation. Scribes would copy written statements and errors would creep in over time. Roman scribes invented punctuation and lowercase letters for legibility. It showed that they could copy with less errors by using these coding styles. In the same way, writing code today doesn’t need to be illegible. Let’s fix it by creating some punctuation rules that will help us and the computer read it better. Additionally, let’s have something that helps us avoid the time loss we tend to endure when finding and fixing bugs. We end up wasting so much time because our mental model of how JavaScript works, is not actually how it always works. Some of the coding issues are because of the discrepancies in how our brains understand the language and some of the issues are a result of badly designed features of the language itself. Some (opinionated) guidelines that come from JSLint for writing better JS include the following:

  • Left or right curly braces? Right is better, some cases of using left will silently break your code and you could waste time diagnosing the simple fix. So consistently use curly braces on the right, because you will never have this problem.
  • Always manually add semicolons – don’t rely on the computer to automatically add them because they sometimes get added in unintuitive ways which can dangerously break your code if you leave it up to the machine.
  • Don’t use “with” statements in order to avoid confusion on how “with” loops work slightly differently than others.
  • Always use triple equals

Not using some of these smart best practices is the equivalent of pointing a gun at your foot and saying “Watch this, I almost never miss!” You might miss, but you might not and the more times you do it, eventually you don’t miss. That would be a tad uncomfortable.

If a feature is sometimes useful and sometimes dangerous, and if there is a better option, then always use the better option.

History Lessons

I am a big fan of history, so I really enjoyed the historical sections of this course. In the course, Crockford discussed the history of JavaScript, the history of HTML and even browsers and the internet. I feel like we can better understand the current situation of the web if we understand where it came from. In always keeping up and being focused on the most modern and latest updates, it’s easy to lose sight of where it all came from. It’s easy to curse those days since today we are still living with legacy issues. Anyone that’s been in the industry for a while can easily remember the frustrations involved with table based layouts and also the collective salvation we found in jQuery. In learning the history, though, I was constantly reminded that those involved were doing the best they could with the limited information, time and resources they had.

The web standards were grown from a naïve hypertext system under intense, highly unstable competitive pressure.

History lesson of JavaScript

Brendan Ike was tasked with creating a script language for Netscape and wrote the prototype in just 10 days! Talk about a tight deadline! Javascript was greatly inspired by hypercard from Apple. He also pulled in features from other languages: he used the inherited syntax from Java, brought in functions from Scheme, removed classes from Self/Smalltalk. It was first called Mocha, then Livescript and was built into the Netscape Navigator 2 browser. Soon after, Sun and Netscape teamed up to beat the giant Microsoft. Sun backed Java and wanted to replace JS with Java in the browsers. Netscape was supposed to remove LiveScript, but they forced it being kept to load the Java, slyly making it required rather than getting rid of it. This is why it started being called JavaScript – since it’s purpose was loading Java. Javascript was thought of and called Java’s stupid little brother.. but with hindsight, now we all know how well Java applets did.
In order to stay relevant, Microsoft created their own browser. To compete, they reverse engineered JavaScript for IE – along with all it’s odd behaviors and bugs. They called it Jscript, so as not to use the name of a competitor, which was a good call, since Sun went on to sue anyone who used the word Java, including coffee shops and even whole islands.

In the meantime, Netscape went to W3C to standardize the language but were actually denied because W3C was not interested. Eventually, they ended up at the European Computers Manufacturing Association (or ECMA), which is a long way to go for a California software company. They created a committee at ECMA and then Microsoft ended up joining and dominated said committee. They insisted that all the bugs and defects remain in the standard to keep backwards compatibility, and since they already had all the bugs documented, it was agreed. The sticky part was that the committee couldn’t agree on a name (JScript, Javascript and LiveScript), so they published the standard as ECMAScript. Which explains why we call it ES6 (etc) today.

JavaScript as a language is what we call it, but officially it’s ECMAScript. The standardization came about in 1997 and updated to ES3 in 1999. ES4 was abandoned due to political differences concerning the language and, so eventually in 2009, ES5 was released a full 10 years after ES3. Then, 6 years later, ES6 became official in 2015.

There are certainly bad parts in JavaScript These bad parts come from a combination of the haste in which it was first created and good intentions of the creators (trying to make the language easy – especially for beginners), and this complex legacy codebase to keep backwards compatible. The proof of concept, when created so quickly, was not intended to be so widespread, but has now become the most used programming language in the world!

History of HTML

HTML also has a long meandering history. There was a markup language used for print called Runoff. This led to another called ROFF. To standardize a few things they came up with Generalized Markup Language. Then Standard Generalized Markup Language (SGML) brought angled brackets and attributes from another markup called Scribe. Hypertext Markup Language was also influenced by apple’s hypercard. XML then came in to make a claim to standardizing the markup.

Example markup from GML showing similarities to HTML

It’s very interesting to me to look at this example of GML and see how clearly it influenced HTML. I feel like a digital archeologist looking through old code to better understand current code.

Fun Fun Functions

There is an entertaining and educational part of the course where we are provided with a synopsis of a fairly simple function, given time to write our own, and then discuss the “best” solutions. It ended up being nearly 50 exercises and accompanying functions. They tended to build on each other as well, so it was a nice programming challenge and throughout I learned a good deal and through discussing them began to see the simplicity and even genius of functional programming even more. Below is a gist I created showcasing the functions I tried to write the requirements for each function in the comments. The function exercises I most enjoyed were the recursion and curry functions but they also touch on higher order functions, closure, generators, factories and factory factories.

https://gist.github.com/circlecube/3ead7d1a46f57842a8b7276698eb3ca4

A quick dive into scope and closures

The course had a nice section that was a helpful framing for closures. Which is a fairly complex and misunderstood concept in JavaScript that stumps many hopeful applicants interviewing for a web engineering role. To get to closures we first needed to look at function scope.

Diagram showing example function scope with nested functions.

When a variable is defined in a function it is scoped to that function and can be used within. For example below, the variable a can be used within the green and the yellow functions. The variable b can only be used in yellow. The a variable will stick around in memory as long as there is a function with a reference to it.

Diagram displaying closure with a private variable being enclosed in a returned function as a private variable.

If we return the inner function then the a value will be encapsulated in the scope, this is what we call a closure. The yellow function can be used and will have access to the a variable, even though it isn’t defined in the function. This is called a JavaScript closure. It makes it possible for a function to have “private” variables.

Web Security

The course pressed the point that “There is no security in obscurity” and that “Security must be factored into every decision”. In fact, having a false security is worse than no security at all, because it puts us at ease. We tend to have a false way of thinking when we say things like “We’ll make it secure later”. In reality if we understand JavaScript, we can use it to enhance our security, since it should be built in rather than tacked on last.

It is not unusual for the purpose or use or scope of software to change of its life. Rarely are the security properties of software systems reexamined in the context of new or evolving missions. This lease to insecure systems.

Many principles of security come from cryptology and ciphers. Auguste Kerckhoffs, author of a military cryptology book in the 19th century, states that a cryptosystem should be secure even if everything about the system, except the key, is public knowledge. Today we still follow this principle.

Kerckhoffs Principle: The design of a system should not require secrecy; and compromise of the system should not inconvenience the correspondence.

The web does get an important security issue right that much other software does not. It doesn’t blame the victims. In other platforms we see a lot of “blame the victim” security models. It’s where we’ll ask the user a question that the user cannot possibly understand or answer correctly. And then when things go wrong it’s the user’s fault for having agreed to this. That’s not a security model, that’s just…stupid! It’s similar to signing every right to privacy away in a legal document before using a product. The browser doesn’t do that (by default). Now the price of that is that the browser is limited in some ways. It’s up to us, the builders of the web, to be smart about how we reduce those limitations in responsible and secure ways. For the sake of security, we must think “Whose interest does the program/website represent?” The user, the site owners, the third-party ads?

We need to alter the way we understand security. We need to better understand the mechanics of the JavaScript language because the most dangerous flaws are the ones we see as a result of misconceptions in how the language works. Our mental model may not reflect what actually happens in the language. Douglas then leads the course through a couple interesting security discussions where attendees work to understand and find security loopholes.

Conclusion

Programmers are as emotional and irrational as normal people.

In the end, we as engineers are emotionally connected to our code and as irrational as any other human. We like to think we are smarter than average, but really we’re all human. We should use things like JSLint (or the 10up eslint code styles) to help us write better and more secure, cleaner code.

I found the course entertaining, educational. It helped me understand the ecosystem of the web by seeing a little more clearly the history of the technologies. The top points of the course for me were the history lessons and the function exercises. I recommend taking this course if this subject matter sounds interesting to you, be aware though that Douglas is as opinionated as JSLint and at times projects a smarter-than-thou attitude which some may find off-putting.

Have you taken the course? Read his book? What were your highlights?

Building something Fun while learning React

Earlier this year I was able to use my some personal reinvestment time at work to study up on react. I took an online training course (Wes Bos anyone?)

I enjoyed the time to focus on learning the material presented. I am also aware that unless I use the information to build something on my own I don’t retain it!

As I was finishing the training I was thinking about what To-do app I should build. That day happened to be a day when there were three consecutive new employee announcements. With 10up being a 200+ company and everyone working remotely, it’s hard to know everyone. I also thought about how hard it is for new employees to get to know so many coworkers at once remotely! We know our pod and those we cross paths with on our projects and our directors, but other than that, it can be difficult. To make a long story short, I thought up a little 10up name game app!

10up employee distribution map

This app loads the team as listed on the public 10up website and with some gamification, helps us put names to faces.

How to play

Start by finding yourself in the team, and clicking yourself. This will set you as the player (a poor and lazy way to authenticate a player, but it works until I have more time). Then below the grid of beautiful faces, select the group you want to focus on for the quiz. This will update the grid to show you all the team members. Then click the giant button to start the quiz.

The quiz will present you with 1 name and 4 people. Select the match and get ready for the next question. Incorrect answers give you another chance to select the correct person, in this way the quiz teaches you people you don’t know. It’s also a good opportunity to use deduction, you might not know the person being asked about but you’ll likely know someone in the list. I loved multiple choice tests in school!

The leaderboard displays those who have answered all questions in the first click. Note that the leaderboard is specific to each team selection, so there’s a set of high scores for the Leadership team as well as for the Engineer team and so forth. Also note, that you must select yourself in the grid before starting a quiz in order to be on the leaderboard (otherwise it’s anonymous). The grid will change as you select different groups, so be sure to select yourself first if you’re wanting a quiz on a group which you are not part of.

Play Who is 10up!

Mad karma awaits for those who top the leaderboard. Enjoy, and thank you for playing!

Some technical details

This was built using create-react-app. I’m only importing a couple other libraries to use: axios, cheerio, firebase.

I was able to practice setting up components such as the PersonCard, Leaderboard, Score and the Quiz itself. I learned about passing needed data down as props as well as callback functions for interactivity. Was able to figure out managing state and even async third party connections. It’s using axios and cheerio to connect and scrape the team data from our website – I tried finding/using an available API endpoint but ran into cors issues (maybe I’ll sort that out later) and went the scraping route rather than deal with authentication et cetera. Then for the leaderboard, its using a simple firebase implementation to store the data.

For those of you experienced with react, I’d love you to look into the code and let me know what I can do better! And if you want to try your hand with anything, PRs are of course very welcome. All in all a very educational exercise for myself (as far as react as well as getting to know more of my coworkers 😀). Enjoy!

A Day In The Life: Evan Mullins, digital nomad, Senior Front-end Engineer at 10up

At 10up we had an internal blog series entitled A Day in The Life to help us get to know each other better and share a bit about how we work on a day to day. I wanted to share mine here as well! It seems a day in my life is similar to many 10uppers, and yet, very different too.

Family intro

I’ve been with 10up for about a year and a half and been working on website front ends since 2007. I’m married to my best friend Krista, and we have 4 kids in tow: three boys followed by a girl. Currently we’re a nomad family focusing on slow travel, worldschooling and house & pet sitting! We treat life as an adventure and are involved with the lives of our kids as soccer coach, cub scout leaders, school teachers and more.

The Jump & a little about our remote life

I was born and raised in Metro-Atlanta (Georgia) went to the University of Georgia and studied fine art and new media. During my studies, I married my Canadian-born wife. Part of what brought us together was our travel aspirations and those dreams drove us to join the peace corps. But since she was still not an American we were denied!? A year after that, we found ourselves graduating college, starting my career as a web designer, settling down in the Atlanta area and having our first child all in the same summer! #noregrets We still had an itch to travel and we felt at times that our best life was passing us by, so we determined to hack life a bit! We got comfortable home-schooling our kids and I looked for 100% remote work. I’m so glad I connected with other 10uppers at a couple WordCamps!

My initial thought was to downsize from a house to an RV and tour national parks, but we worried about connectivity and comfort (with so many in such a tight space). Plus, we still had an itch to get farther from home and see more of the diversity the world offers. I heard about a friend of a friend who travels through trustedhousesitters.com and I became excited looking at places we could go via housesitting! I’ll never forget coming out of my office for lunch on my first day with 10up and my wife had taken everything off the walls! It was a reminder of our plans and to keep us from getting too comfortable. Another time I came out and she told me she’d just sold our bed! It was quite a process decluttering literally everything, as well as selling the house, but it went fast! I started at 10up in March of 2018 and by the end of May, we pulled out of town with everything we owned in the minivan (we did leave some keepsake type things in storage). We were going on a cross-country road trip (via Jackson Hole for summit), we sold the van in Utah and flew to the other side of the world for a 2 month house-sit “down under”. 

We take our “home” with us and travel to other people’s homes to house and pet sit for them. I work from their home and we homeschool from their home. It’s a nice base to then explore that corner of the world and full of adapting and adjusting.

We have a family saying now: home is where we are

House Sitting

Housesitting has been the lifehack to allow us to afford travel, but also keep a sense of home as we go around. I really enjoy exploring and learning about different cultures, so slow international travel is my sweet spot enabling us to visit many places. Worldschoolers is the term for families like us, we were even featured on an Australian radio show discussing worldschooling and our travel. For those interested in stats, we just calculated things about a month ago for celebrating our first 500 days of nomad life!

Stats

In 500 days: 350 days were housesitting, around a split with around 75 each staying with family and friends and 75 paying for a night somewhere (hotels, airbnb, campgrounds, family-friendly hostels). These 350 days of house sits, were between 11 individual sits, ranging from the shortest at 9 days and the longest 122 days with an average of about 30 days. We’ve pet sat for around 150 animals! We’ve had mostly great and some crazy experiences pet sitting: dogs and/or cats at almost every sit, but also chickens, cows, sheep, rabbits, hamster, birds, a mango farm and a kangaroos rescue farm. We’ve spent time in 7 countries along the way!

Some concerned family or friends have cautioned us that our kids need stability. I agree and it is something we are sensitive to and keep an eye on, but I also think the benefits outweigh the risk. We follow a worldschooling mindset where the world is our classroom rather than the kids’ classroom being their world. I’m working on teaching them to respect other people and cultures and that the world is theirs to explore. Staying in homes for the most part, does add to the sense of stability. We do our best to make new friends and get involved with the community when we arrive. We’ve joined sports teams and other clubs or even homeschool groups and have made some great friends along the way. A surprising bonus to pet-sitting has been the therapeutic love we find with pets as we travel, and especially for the kids. We’re able to “step into” lives of others as we sit for them and it’s a great experience to get to know their homes and pets as well as their stories. We still aim to give the kids a stable family life even though we’re constantly in different places. I think it actually helps our kids sanity that there are 4 of them too, they have friends everywhere we go because at least they are friends with each other.

On Being Flexible

A main component to life with the Mullins is flexibility. Something that changes quite frequently is my working hours and even my timezone. For example, in Australia I worked the local night-shift to accommodate project schedules. I’d start work around 7pm and stay on until 3 or 4am. In New Zealand I couldn’t conceive of staying up until 6am for meetings, so I got up and started my day at 5am locally and worked until lunchtime. It does take me a little time to figure out a good schedule when we end up in a new place or time zone and I’m thankful my project leads have also been flexible when working these things out with me, and correct me if I’m wrong, but I don’t think any projects have suffered because I was up later or earlier than some think is natural. It’s actually kinda nice to be up and working when the house is quiet. I’ve found a good focus in those moments because I also have to be flexible with my workspace. I do travel with a wireless keyboard and mouse and set up a space at any table or desk I am lucky enough to find in the house we are calling home for the moment. I’ll usually find a second screen or even a television with hdmi input and set up my second monitor, which I’ve found is golden for my own productivity. Having 4 kids that are home much of the day, I have invested in nice headphones that really help me focus. I’m always listening to music unless I’m in a meeting, and it helps me find my focus and cancel out the background noise. Here are a few of my work spaces:

Daily Work & Routines

Lately, I prefer to start my day early (ideally around 6, but in actuality usually around 7) with a cup of coffee and get some work in before breaking for breakfast when the family is up around 8 or 9. We’ll talk about the day, what field trip my wife has in store for them that day and maybe touch on a homeschool lesson or watch the latest CNN10. I’ll get back to work as they work on their “essentials” for the day (reading, writing and math). At my desk, I like to have a pad of paper next to me for jotting notes and organizing thoughts. I’m a natural list maker and am always making a list of my todos. It helps to see them in one place when I’m dealing with projects simultaneously in teamwork, github and jira. I work to make progress on my tickets every day. My projects of late include: InvestorPlace, Google Site Kit, Credit Karma and most recently I’ve been fully resourced to Dennis. It’s been really nice to be able to focus on one big project and get deeper into the code base and processes and not be as distracted with context switching and remembering the nuanced differences from one project to the next. Each project I work on I have a file for notes that are specific to my needs and process. Things like which node version I have to `nvm` to, all the build and test commands, links to dev sites and quick notes on process. I tend to list things and note things so I don’t have to try to remember them, because I usually end up forgetting something.

“Paper is to write things down that we need to remember. Our brains are used to think.”

Albert Einstein

I usually have a tab open with my work gmail, work calendar, music player, harvest timesheet, 10k ft dashboard and my project management sites for each project. I also bookmark every useful link and organize them into folders per client and project. I name the bookmark descriptively and when I need something I type these names into the address bar and bookmark autocomplete as I type. I have a couple work tools to plug for productivity too. I really like Dato to replace the native clock on the mac because it integrates a calendar and multiple time zones. I love the clipboard manager Flycut. It’s so nice to have a copy history and it helps to copy groups of text and paste them in a series. I use Local by Flywheel for my local wordpress environments, sourcetree for git and VSCode for coding. I’m not super organized with blocking off my calendar – I’ve tried it and found that it’s more stressing than helpful for me. I track my time throughout the day though and will log my time every couple hours. I’ve found that if I don’t, I can’t remember and have to guess more than I’d like to about how long various tasks take.

I have very much enjoyed being on the styling team for Dennis projects. We’re focused on building and styling a shared component library across a growing multitude of sites. We are using styleguidist to create a style guide per site that loads all the react components and styling variables. Then other teams take the components we style and wire it to the CMS. Designing systems, not pages has been a mantra of mine and it’s been great to be practicing it!

Fitting In & Other Fun

I have a strong visual background (comes with a fine art degree), and ended up in engineering via studying animation and flash. I’m not ashamed to say that actionscript is where I first figured out how `if` and `else` clauses and even `for` loops worked. It was amazing to me to visually see these commands being followed when I’d script some interactive animation. It was messy code though, and I was also learning about CSS at the time – connecting the technology with the design was where I found a home. But, since I initially started school to be a cartoonist, I feel like I kinda fell into web development. Don’t get me wrong, I certainly enjoy it, but I feel like as a self-taught developer, my formal coding training pales in comparison to others.

So sometimes it is hard to feel like I belong among so many other amazing engineers. I still prefer to use a GUI to run my git commands rather than staying in the terminal. Sometimes, running `npm` or `yarn` commands honestly feels like black magic. Sometimes I feel like I’m in over my head and everyone else “gets it” while I’m stumbling in the dark. Our field is constantly changing too! I have learned to accept that in two years time many of the rules and standards I follow may be different, irrelevant, even my whole toolset may have changed. I (try to) take a little break and remind myself that while I don’t know so many things that seemingly everyone else does, everyone else may not necessarily be an expert at what I do know. While focusing on all the things I need to brush up on and learn, it’s too easy to forget what I do know and what I bring to the team. I have specific capabilities that led 10up to ask me to join the team in the first place. We each bring our skills to the team and together we are a full piece band. So if you’ve ever felt similarly, chin up! Remember that you are unique and bring much more than you realize to the table. :cheers: We’re all in this together!

Dealing with complex tasks on top of the emotional stresses of parenting and logistical stresses of constantly moving my family does take its toll sometimes. I’ve learned that after being stuck on a work task it’s always helpful to talk it through with someone. Nearly every time, in framing the question, I find the answer or the fix. Whether it’s via slack or a quick zoom or even explaining it to my wife or one of the kids! When I get stuck on a task or stress out I like to step away and take a break. Fresh eyes also fixes nearly every issue, half the time it’s a typo anyways. I’ll go for a walk – with a dog (if we have one at the moment), by myself or even walk with the family. I also try to relax playing guitar (if there is one handy) or even just listening to some good music. I’ve learned that I carry my stress in my back and shoulders so I’ll loosen up with a deep tissue massage and stretching, mindfulness meditations and even yoga. Destressing regularly pays off in huge dividends to me. I focus better, do better work, feel happier and in the end am even a better husband and father.

During my off hours I do focus some serious time on logistics. Things like finding our next house sit, researching things to do in our current or upcoming areas, learning how to purchase a vehicle in a foreign country or watch for affordable travel for 6. I also join the family touring local sites and enjoying local food. It’s fun to have constantly changing surroundings and never have a shortage of new places to check out. We strive to be more than tourists, but to really get to know local customs and people. I find cultures fascinating in that they teach me so much about myself. I’m so grateful for a remote job where I actually get paid to do what I’m interested during the day and also get to travel and do the fun work of living my dreams when I’m off the clock!

Where do we go from here?

After our stint in the UK through January, we’re still not sure where we’re off to we just confirmed a house-sit in France early next year. So, I guess we’ll make our (br)exit from the UK… After that, who knows! We may continue housesitting, or start renting longer stays or even go back to an RV. At some point we’ll probably need to settle for a while and take care of some looming issues, things like orthodontic work for our oldest. Some days it’s very unsettling to not know where I’ll be in just a couple months (we try to have the next few months planned out but it varies from time to time). Other days it feels completely liberating to be living this lifestyle. It’s not for everyone, but for me, it nails that fine line between genius and completely insane where I think is a pretty good place to live life. It’s certainly never boring! It’s extra work to do this as a family, but I’m proud to be teaching my kids firsthand to chase their dreams. If you’re interested, we’ve got a website about the adventure at nomaderwhere.com complete with map!

It’s been really fun to share a day in my life and participate in this series. Thanks for reading!

WordPress Core Contributor and my WordPress Story

As I updated a WordPress site today (the new 5.0 version just shipped) I was proud to see my name in the list of core contributors! I’m listed as a core contributor in versions 4.9 as well as 5.0! I didn’t get around to sharing the news last year, but seeing my name in the credits as I upgraded today I realized I should share my WordPress story.

My name in lights ^

My WordPress Story

I share because as an aspiring developer over a decade ago, I fell into WordPress quite accidentally. I was studying in art school at the University of Georgia and creating my own interdiscipline degree with art, technology and animation. I happened to sign up for a Web design for Artists course to create a portfolio site because I was friends with the teacher. We learned flash and stepped into WordPress for blogging. I learned some coding from flash as well as the basics of HTML and CSS to customize the look of my kubric2 blog. The more I learned about coding online, the more I just ate it up!

I loved the immediacy of it all, in contrast to the long time required in my animation classes. For animation you must develop the story, the characters, do the modeling, and rigging and textures and lighting and keyframes etc etc etc, and then you have to let the computer render the animation to see the final. One of my final animation projects for a full semester project was literally half a minute long and it was a rendered movie file that I couldn’t even email because it was so large! It was a motion capture video and was still rather jumpy, but was pretty exciting stuff at the time.

In contrast, in my website class, my final project was viewable anywhere in the world and I could change the look on the fly. I even uploaded my animation so that others could view it online. I was excited for the new world of the internet! It was also interactive! You can do more than just watch it, you actually engage with it and touch (click) it and explore it. Though it can have some movement like animation, it’s a more simple type of movement.

Under pressure to support my pregnant wife, I found a job as a web designer and learned more about javascript and php on the clock. I’m happy that years later, I’m still using WordPress to build sites and grow my skills. WordPress has helped me make sense of web development and grow my career to support a growing family. I’m still extremely grateful and even fascinated by the open source community surrounding the software. I’m humbled to be included in the names of contributors. If I can do it, so can you. Keep working at it and chase your dreams.

My (small) Contributions

Last year, for 4.9, I was able to fix a bug I found in the media library where clicking on the edge of an image failed to select it. It was minor, but I found it annoying, so I created a ticket and after tinkering a while on it figured out how to submit a patch. I discussed the patch with some others and at WordCamp spoke with a committer who pushed it through!

I got involved with the early development with Gutenberg (the new block editor) on github. I figured out how to submit the pull request via github and participated in the wordpress slack discussions. That was a long time ago, but finally with the release of 5.0 Gutenberg is now included. That is until I got too busy to continue and then when I was about to pick it back up, I changed jobs. I know they have been small contributions, but I’m proud nonetheless. I have a goal to continue my contributions and perhaps even up the amount of code I’m able to share.  I feel like I’ve come a long way since those early years, as well as WordPress has come a long way.

My github handle in lights ^

WordCamp Atlanta 2018 – I’m Speaking on Processes for Development Teams

I’m happy to be contributing to the WordPress community as a speaker at WordCamp Atlanta 2018.

I submitted a few topics and have been selected to speak about development process for teams. Here’s the short description:

Overview of some processes used at an agency level. Version control, code standards, database migrations, environment aware config files and automated deployments. From local development setup to multiple environments, version control to automated deployments, content migration to modular mentalities. With some how-to talk and some how-not-to talk, we’ll discuss some ways to “soup up” our process to work for us when it comes to web development and WordPress.

Let me know if there are any topics you’d like to hear me cover and I’ll do my best to work it in.

I’ve also been asked to help out during the developer workshop day. Details are still to be ironed out, but it will be an introduction for newer developers and help them get up to speed on development best practices. It will also be a specific look at the development updates on WordPress 5.0, more specifically the Gutenberg editor.

After contributing to the presentations at the Atlanta meetup about Gutenberg I’m excited to again help out in preparing the community for the new editor experience.

Presenting at WordCamp Atlanta is exciting for me because I’m from Atlanta and it is the first WordCamp I attended back in 2012, it was also my first time speaking! Six years have passed- the industry has changed and I have learned a lot in the past 6 years! I have learned so much about working within WordPress and have led multiple teams in different agencies. I’ve invented and iterated on process and workflows for myself as well as the team. I’m excited for the opportunity to take a step back and detail some of these procedures I’ve found most helpful.

 

10up

Turning the page

I’ve joined 10up as a Front End Developer. 10up is a leader in the WordPress industry as an elite WordPress agency (with clients like Microsoft, Time, ESPN, and Adobe). While speaking at WordPress conferences among a few 10uppers, I heard more and more about the distributed agency and I heard they had an opening. Seeing how a 100% remote position would align with my family’s vision of travel & world schooling, I held my breath and applied. I was ecstatic when I eventually received an offer to join the team!

So, after nearly 4 years at Brown Bag Marketing, it’s bittersweet to be moving on. I learned a lot and grew leading the WordPress team. I built and rebuilt processes and iterated, built products and open sourced plugins, internal products. I taught classes and gave presentations. Overall, I made some really good friends, worked hard and together, we built some really fun projects.

Brown Bag Marketing

The next chapter

I’m very enthusiastic about working for such an elite WordPress agency. I’ve always been The resident WordPress evangelist, I’ve converted agencies to WordPress and convinced others that it was more than just a blogging platform. I’ve built many impressive sites on WordPress and used the fruit of those labors as proof that WordPress was a viable tool for an agency. It will be an exciting change to have as coworkers many that I’ve looked up to over the years as the rockstars of the WordPress community. I know I will learn a lot and grow as a developer on the elite team at 10up.

I’m also ecstatic to be back in a remote position. I live in Atlanta which is rightly known for notorious traffic. I’m eager to save 10+ hours a week and to put that time back into my family and pursuing other interests. I understand that a remote workforce has its own challenges and problems, but I also trust that the folks at 10up have solutions to at least some of those issues and will work to ensure that even though i’m not physically with my team, we can be on the same page and do stellar work. I’m feeling the travel bug lately, and even hope to make the most of this remote life to explore the world with the family! Whether that means RV life or some international stints, we are excited for some family adventures.

Speaking at the Inaugural WordCamp Greenville

I was excited to hear about another WordCamp being held close to my home base in Atlanta. Greenville announced their first WordCamp and I was happy to apply as a speaker with a few presentation ideas. I was excited to hear that I was selected as a speaker. Today it dawned on me that as I’m preparing to head to Clemson tomorrow, that I hadn’t even posted that I would be there. So here’s the announcement that I’m speaking at the Inaugural WordCamp Greenville 2018, tomorrow. 🙂

There’s the official announcement from @WordCampGVL.

I’ll be presenting a quick introduction to all things development. While I have presented this topic a couple times now, I still enjoy it. Each time I have a handful of attendees come to thank me and say they had never seen the big picture so simply before. I remember (and still am sometimes) a beginner with certain technologies and getting a quick overview sweep of the whole landscape is helpful and grounding so I can know how it all fits together. I joke when talking about being a web developer/engineer that I started more on the design side. Heck, I even have a BFA, bachelor’s of fine art degree. So, what you might ask am I doing programming sites. I started more on the design side but have since joined the dark side. I have found a more fun and creative outlet writing code than I did actually visually designing things. I still feel that web development is a creative exercise and enjoy the technical side as well as the process and the creativity required. I enjoy helping others grasp this complicated landscape we call web development because I was there and still get lost sometimes myself. So, this talk is called:


Beware the dark side, or an Intro to Development

Crash course introduction to web development for WordPress covering acronyms, buzzwords and concepts that often leave outsiders mystified. Overview of primary development processes and what software and tools are needed to play the game. We’ll cover what you need to go from zero to developer and hopefully how to have fun on the way. WordPress development tools explained for beginners: ftp, git, svn, php, html, css, sass, js, jquery, IDEs, themes, child themes, the Loop, hooks, APIs, CLI, agile, bootstrap, slack, linting, sniffing … etc.


If you’re in the area, sorry for the late notice, because the Conference is sold out, but I’ll update you with slides once they are complete on my WordPress page and the presentation will be up on wordpress.tv eventually.

Speaking at WordCamp Wilmington about the WordPress API

I am speaking this weekend in North Carolina at WordCamp Wilmington. I thought I had posted this weeks ago, but apparently not, so as I finish my slides for the talk, I’m also announcing that I’m giving it. I have never been to Wilmington and am excited to check it out!

I was asked after my presentation in Raleigh to share with Wilmington as well, and they selected a topic I submitted about the API. I’m happy to share what I know and help others grasp what a cool tool this is and how it will change the landscape of the web.

Here’s the talk description:

It’s here, what can I do with it now? A couple case studies on how to use the API and code samples to get you started. It allows us to further separate the data from the code. Use WordPress as a CMS and then via the API easily access or update that data to power whatever we like. We’ll touch how to set it up and a handful of examples and then explore an iOS app pulling all it’s data and assets from a WordPress site via this API.

I’m discussing the API history and roadmap a little as well as how to use it and what for. I’ve got some usage examples with code to show that it’s not very hard to get started and it opens up many many possible uses of WordPress. In a nutshell, rather than getting your content or data via a webpage as part of a website (php, html, css and javascript), you can retrieve your data via the API.  You’ll get json data that is compact and fast to transfer and then you can do endless things with it. Create an app, load it into another website, analyze it as data…

Here are the example uses:

  1. Mobile App – Content via API
  2. Mobile App – Custom endpoint to API
  3. WordPress Plugin – POST content to API
  4. External site – GET Content via API
  5. WordPress Plugin – using js client

Come check it out, my slides and other presentations (most with videos) are listed on my WordPress page at circlecube.com/does-wordpress/

WordCamp Asheville 2017 Speaker – Intro To Web Development and Modular Web for WordPress

I’m pleased to share that I’ll be speaking at WordCamp Asheville, not once, but twice! I’m presenting an Intro to Web Development for beginners as well as a lightning talk about Modular Web practices for WordPress.

wordcamp asheville 2017

My first talk will be the same as the one I presented at WordCamp Raleigh, but after having presented the content once and taken questions and discussing things with attendees, I hope it will be even better and more helpful. Overall the feedback was very grateful and the audience seemed to have learned a good bit. There were even a few people that came up to me to say it was the best presentation they had seen at the conference. So I am happy to present it again. Here’s the abstracts for each presentation:


So you wanna dev? Join the team!

Takeaways:

  • Learn to speak dev
  • Get familiar with concepts (and acronyms) you’ll need to dev
  • Learn about tools that will help you

Modular Web for WordPress (Lightning)

WordPress the CMS, meets the Modular Web. We need to stop thinking about a website as a collection of pages and templates, but as a set of modules and a system to manage them. Modules, like Legos, are interchangeable and can be combined fairly quickly to create an infinite number of results all while both showing variety and remaining consistent. With this modular paradigm shift, our workflows improve, our websites improve and our very well-being improves. Let’s explore how to use WordPress to manage site content using modules. We’ll see what this does for our development process and programming as well for our content management via the admin. We’ll discuss how to build and maintain a module library, and use it for every site you build. These principles have been immensely helpful in each team or project where I’ve put them into practice, so we’ll even take a look at a few examples and point out where to learn more.

Takeaways:

  • Learn the basics of Modular design for web
  • Understand the advantages to building sites modularly
  • See how to do it with WordPress

The second talk will be one I submitted as a full talk, but was asked to present it as a lightning talk. It will be tricky to squeeze everything into 15 minutes, but I’ll do my best. Developing modularly is something that I am passionate about. I think a lot of sites use WordPress as a CMS, and forget the system part of that. We should use the CMS to help us build flexible systems that are flexible. I’ve been preaching this idea of “Building Systems not Pages” for a long time and hope to inspire others to work smarter. There is a lot to cover, but having only a few minutes to do it in will force me to present the main and most important points only. I’m excited for the challenge!

Tickets are on sale now, so if you’re in the area, I hope to see you at WordCamp Asheville 2017. It will be the best $40 you spend!

WordCamp Raleigh 2017 Speaker – WordPress Devevlopment for Beginners

Although the schedule is not yet out(The schedule is here), I’m happy to announce that this year I’ll be speaking at WordCamp Raleigh 2017 . I’m preparing an intro to Web Development for WordPress users talk. We’ll cover all the crazy acronyms people forget to ask what they mean and help (I hope) attendees at least test the waters in the development pool. There’s a learning curve which some would say is increasing with all the complexities in the Web world these days. This will be my second trip speaking at WC Raleigh, since speaking last year as well as WordCamp Raleigh 2016. I’m excited to see some familiar faces.

So you wanna dev? Join the team!

WP Dev/tools for beginners: ftp, git, svn, php, html, css, sass, js, jquery, IDEs, themes, child themes, the loop, hooks, APIs, CLI, agile, bootstrap, SEO, slack… etc.

We’ll discuss the language of programming and various acronyms and buzzwords used by devs in this crash course introduction to the developer’s world. The session will be an overview of primary development processes and terms as well as what software is needed to play the game. We’ll cover what you need to go from zero to developer and hopefully how to have fun on the way.

 

Why do I want to talk about this?

fortran- the original hanging chadI know what it feels like to be drinking from the firehose. I remember all too well how mystical the development world looked from the outside. I studied Art throughout high school and college. While I have a Fine Art degree from UGA, I was always interested in technology as well, but more along the lines of what I could do with Photoshop. I wasn’t (and still am not) into building computers or fortran coding or spending much time in my terminal. I was studying digital media art and computer animation and ended up taking a web design for artists course – and it changed my life.

I was introduced to HTML& CSS, WordPress blog, and ActionScript in Flash. I enjoyed the flash days and that experimentation really helped spark my interest in programming. I continued to update my WordPress site and learned a lot programming just from wanting to make my own site better. Then eventually, until I was took the plunge into development full-time.

love actionscriptI still remember feeling elated when I loaded up a project in the browser to see it live. Also when I finally understood for loops and the other weird symbols and keywords in programming. It’s great how you can build something and moments later, have it online and accessible to the whole (connected) world. A lot has happened to/in web development and there is a much larger more complex puzzle to sort out when getting started today vs a decade ago. It really is like learning a new language, along with a whole way of thinking. I am hoping to help guide you through it .

Get your ticket

Last year, at WordCamp Raleigh 2016, I presented in the developer track discussing the WP REST API. This year it will be interesting to present to the non-developer attendees and see if I can bring any into the fold. So, go get a ticket for this year! I’ll see you there!