In the beginning...
I found a YouTube video telling me I could learn to program in just a month with Ruby on Rails! I had an idea for an application, and decided to give it a shot. I wrote my very first line of code back in early March 2015, "Hello, World!".
Ruby On Rails, I learned, is a framework built on Ruby, so I decided to learn Ruby. After about a month or two, I had some basic programming skills under my belt, and it was time to run a server, Sinatra. I had no idea about Server Client architecture yet. I was able to get the server to run, but really didn't understand anything that was going on. Then I found some HTML/CSS tutorials, and thought "Aha!" This is what I was looking for! I could see my work being displayed on the screen, and this rewarding feeling fueled my passion to learn more.
Next up was Javascript....
JavaScript ❤️
Learning JavaScript was enlightening, I was happy to see a lot of the same concepts I learned from Ruby were there in JavaScript as well. Arrays, functions, loops... Hmmmm... programming has some common themes, I see!
I pushed hard everyday, writing code in the evenings after my day job. I avoided the complex looking 'jQuery' with its unfamiliar syntax, sticking with Vanilla JavaScript. This really helped me down the road, knowing the lower levels of JavaScript without the high levels of abstraction the jQuery provided.
Once I felt comfortable to move on to the next layer, it was time for PHP and MySQL
WAMP Stack --> LAMP stack
I was still using an old Windows 7 laptop at this time. I can remember spending a whole night trying to get PHP, MySQL, and Apache up and running. The hard work paid off, and I followed a great tutorial from Lynda.com that taught me to build my own CMS from scratch. I watched it once through, and then a second time while coding along. It really clicked, enabling me to write my CRUD operations from scratch, and build a useful application!
The first real application I build was called TeamBall. It was an app designed to help recreational basketball leagues track scores and stats throughout a season. Teams would sign up, register players, and then click on an image of the basketball court to record time and location of events, like missed or made shot, foul, turnover, etc.
I learned all about making AJAX requests. After writing many Vanilla Javascript XHR functions, it was time to implement some jQuery. I was beginning to see what a full stack application looked like, and appreciate all the moving parts; client, server, and database.
Making this application took several months of trial and error. It was the first time I'd had a file reach 1000 lines of code! I got my first glimpse of what poorly planned code can look like. Organization is key, and having a well throughout plan to execute can only help the end product be more sensible, familiar, and extendable down the road.
I wanted to show my new application to friends and family. With a bit of research, I quickly learned about networks, and inter-networks, and how the internet as a whole functions. I got my first Raspberry Pi and had a running web server open to the public internet hosting my application!
I also made the move from an old Windows 7 laptop to a new Linux Desktop, the world of software developing just got a whole lot better. Goodbye Powershell, Hello Bash. I had a much easier time getting the LAMP stack set up, and started getting comfortable in the terminal.
How can I improve on this application? AJAX is an amazing technology, allowing many great features for UI/UX. It requires a request though, but I really wanted new data to be sent to clients as soon as the server received it. After a few Google searches, I found websockets were the answer!
Meteor, NodeJS, Socket.io, MongoDB
I had the itch to make a real-time application, and started down the path of learning MeteorJS. MeteorJS is a whole platform, offering templating, server, database, and many more features right out of the box. I worked at it for maybe a month or so, but decided it was handling too much stuff I didn't understand. My goal was to get a better grasp of how it all worked before using such a powerful tool which handled everything for me.
I dropped Meteor and went straight into NodeJs, adding Express and Socket.io soon after. Socket.io is a wonderful library to handle websockets with ease. I was now ready to make my next application I called MeetApp. MeetApp is a real-time, location-based app to help friends meet up and plan activities. It offers a chat interface, and broadcasts GPS location (with permission) to facilitate "meeting up", or to show users if their friend is running late. Not yet implemented, but an idea I would like to pursue, is adding the ability for businesses to entice users to gather at their location; coffee shop, movie theater, etc, and get a group discount, like buy one, get one free coffee.
visit MeetAppMeetapp had other experimental features. I used a weather API to display weather information, if you click on the Google map, an icon will appear showing the current weather conditions. I also added the ability to upload files, mainly images, but I had plan to support any file type. With the images uploaded, a user can click the "Primitive" button to run the Primitive image transformation found here Primitive
More powerful tools, and ES6
Skip forward a few months, and several small "Just for Fun" projects, and it was time to learn modern JavaScript. I'd been avoiding the large tooling chain for JavaScript development as long as I could. I pretty much skipped Grunt and Gulp, Ember and Backbone, and landed right on Webpack, React and Vue. It felt like I was learning Javascript all over again - new patterns, practices, and architecture. It sure felt like a lot more work than I was used to, just writing a few JS files and loading them with a script tag. Now I was setting myself up to be more scaleable, more organized and flexible to the changes that are inevitable. Both React and Vue provide a command line interface that simplified setting up the environment.
These new tools enabled me to make larger, more scalable applications. Examples
Blockchain and Smart Contracts
I was fortunate enough to have the opportunity to help a startup company build an MPV. I only knew a little about Bitcoin, but I was determined to learn all about it. The Startup company pointed me towards learning Smart Contract development for the Ethereum Blockchain Network.
I learned how to write smart contracts (classes) in Solidity, and deploy to the blockchain network where it will live at a specific address, waiting for any transaction which will invoke any functions is has coded in it's source.