As a wannabe developer, my skills primarily lie in front end web design. Although I've managed much more technical developers, and regularly work with clients to transcribe requirements into high-level technical specifications. I'd say I know my way around the technologies I work with well enough to be productive. The one thing that I've never quite wrapped my head around was putting "pen to paper" or rather "hands to keyboard" to code up some of the more technical bits. I regularly
curl API's, but I've never built an API, or automated the usage of one.
As part of my work on Carbon, I've worked with programmers to help dynamically access API's to pull relevant financial data, manipulate it, store it, then return it to the user. In the simplest contexts, this is something like getting the stock price for an equity. Submit an equity symbol, get the price returned. Simple, right?
In execution, it ends up being much more complicated than meets the eye. Just a few questions that come to mind:
- How does your site know when to hit the API for that data?
- Does a user manually have to submit the request via a form or input?
- Do you automatically hit the API when a user lands on the page?
- Do you hit the external API for every user, or can you pull a cached value to handle high volumes?
- How you cache the value and refresh it?
- How do you manipulate the API returned value to only return the attribute you're looking for?
- How can you ensure you stay within the usage limits for the API?
Some of the answers to these questions are process-related, others require technical solution for which I do not have the answers to, despite how simple they may be to an even intermediate developer.
I follow quite a few successful developers on twitter, and I enjoy getting glimpses into what they're working on with the cutting-edge of tools and frameworks they're using. In many ways, I envy their skills. I envy the fact that they can bring an idea from concept to execution without needing external resources.
How to learn?
There's a tremendous wealth of fantastic resources all over the internet on how to learn all sorts of languages and libraries, methods, and techniques. Anything you want to know, you can learn on YouTube, uDemy, Team Treehouse, CodeCamp, just to name a few. I've become particularly fond of Jeffrey Way's Laracasts lately, which are "bite sized" videos in a range of topics, though they all relate to PHP and Laravel in some capacity.
I've watched a lot of videos. As I spend a lot of time on flights these days, I usually have 6+ hours a week of wholly uninterrupted time in the air. While much of that time ends up being a nap, or a movie, I've challenged myself lately to watch more "educational" content, including introductions to PHP, Laravel, Object Orientated Programming, Vue.Js, and Chart.js.
Yet at the end of the day, I still find myself struggling when I'm staring at a blank file. In many ways, it's an issue of not knowing where to start. Unlike markup languages that usually live together, languages such as PHP rely on functions, classes, objects, etc. that live across the structure of a project. Combine "where do I start?" with an underdeveloped intuition for object orientated programming, and I find it tough to execute on any idea that pops into mind.
I tried to remember back how I learned HTML and CSS, and it was primarily from experience. I remember modifying the CSS on my first Wordpress blog, using bits of HTML to format my text - something I've never done with PHP. Although I have access to a number of custom, unique PHP-based repos, I've never spent the time to sit down and understand what I'm looking at.
So I'm going to challenge myself. Execute on my next quick idea from start to finish. Idea through execution. I would love to work on Carbon directly, but it's current codebase is too far above my own knowledge that I fear I'd spend too long trying to learn something way above my level. Even learning it, my contributions would likely not mesh well with what we've already built. I think starting from scratch will be good learning opportunity. I've got something in mind, but want to formalize my thought process a little more before I lay the groundwork for where I'm going.
Photo Credit: Laravel Homepage