Becoming a Front End Developer - Diary 4

This post was first published on my personal WordPress.com blog. It was migrated here for historical reasons (and because I am a compulsive completionist) and may have been edited from its original form and content.

This is a post I’ve been excited to write for a while. I’ve been researching the things I want to accomplish during my transition to becoming a front-end developer. This is only my initial set of goals; I will make adjustments as I progress. I also cannot make any comment on pace; I can’t make meaningful estimates about things I don’t know. It’s a long list of goals, and I probably won’t get to all of them very soon, but it’s important to write down all ideas so they can be organized together.

Meanwhile, right outside my apartment, this is happening: a parade, and, later, about 20,000 bar crawlers. I think I will stay inside… I’m such an exciting person, right?

_Note to non-technical readers: there’s not much for you beyond this point, except possibly 1000 words to bewilder you. _

Methodology

Some ways of learning are better than others, and I do love anything meta. So not only do I intend to learn a bunch of stuff, but also examine my learning process in order to become an effective learner.

  • Reflection is one excellent way to deeply learn. It is the biggest reason purpose of this blag series. Future posts will focus on a certain technology, what I am learning, or the projects I will build.
  • Learning How To Learn combines excellent information with terrific delivery. In the first few weeks I learned a lot about how the brain works when learning (focused/diffuse), working memory (four things), chunking (when you fully understanding how smaller bits of information are connected, you can treat them all as a single piece of information), and the importance of sleep (it’s an antidote for the poison of staying awake; no, I’m not kidding). I’d like to finish the last 40% as it seems to be just as full of practical and useful information.
  • I will tweet about the things I am learning. This will help me connect with the community of developers (hopefully) and start some potentially useful conversations.
  • I will build a GitHub portfolio of applications that I build. This, more than anything, will serve as proof of what I managed to accomplish with this whole endeavor. If I study hard and produce nothing, I will be worse than unemployable. Only the portfolio can prove my skills and knowledge; I am getting no certificates or diplomas.
  • Actually, I may join some kind of online program for direction. There is Bloc.io, but I’ve also been considering Udacity’s nanodegree program, as I hear it’s pretty well-put together, has input from famous tech companies, and is honestly just way cheaper than the other alternatives. I won’t have too much time

JavaScript libraries

Using vanilla JavaScript (or any language, really) isn’t the most efficient way to write code. The majority of things a web developer does has already been done by others, and their work is often freely available, even for commercial purposes. If I want to be an excellent coder, I should have familiarity with and be able to pick up any of the popular libraries. Looking at their source codes will also help me learn quite a bit about JS itself. There are tons and tons of cool libraries out there, and while it would be impossible to know how to use them all, it would behoove me to at least know they exist and take a glance at their capabilities.

  • Expertise in AngularJS, knowledge of Knockout, Backbone and Ember.
  • Ext.js. It’s quite popular, but not free.
  • DOM manipulation

    • jQuery I’m already very familiar with it. It’s pretty much the new JS for web applications.
    • Dojo toolkit
    • MooTools (never heard of anyone using it, but it’s stuck around for long enough that it warrants a brief look)
    • Underscore/Lodash
  • Special-purpose libraries

    • ReactJS and react-template
    • RequireJS
    • Browserify
    • Modernizr
    • Blast.js - This seems like it will be very useful for my typing app
    • Stripe - accept payments
    • InstantClick - preloads pages for super-fast user experience
  • Image

    • Raphael
    • Famo.us
    • d3
    • Three
    • n3 (d3 for Angular)
  • Testing

    • Jasmine
    • QUnit
    • Mocha
  • Mapping: Leaflet

Basic Web technologies

Yes, Javascript is a web technology, but it’s more than that now, and it’s also my focus, so it has its own section.

  • Read the HTML5, CSS3 and HTTP1.1 specifications. Seriously. This is something I really want to do, and I know that this would both provide great knowledge and
  • Bootstrap as a CSS framework. There are others out there, but learning Bootstrap should make those others pretty easy to pick up, if it ever becomes necessary.
  • SASS/LESS/Compass/Stylus as a CSS pre-processor/extension. Probably wanna go with SASS because it’s most popular.

Tools

There is a huge difference in productivity between a great programmer and a great programmer who knows his tools inside and out. It’s always a warning sign when a senior programmer only types at 50 wpm or doesn’t know the keyboard shortcuts for frequently-used actions. For the tools that I will definitely be using, I do want to achieve excellent proficiency. For others, just knowing what they’re about is good enough.

  • Practice touch-typing at 120 wpm or more. I currently type at 70-80. Remember that I switched to Colemak only a few months ago.
  • Learn the keyboard shortcuts for my text editors and IDEs: Eclipse, WebStorm, Atom, VIM/EMACS
  • Learn the more useful commands and flags in Unix: awk, grep, sed, man, etc. Here’s a starting point.
  • Git
  • Vagrant for testing on different environments/browsers
  • Windows console. Yeah, I know, I should just install Linux. Ok, fine.
  • Ubuntu. I’ve installed it more than once, believe me, but I’ve never followed through with migrating to Linux. It’s about time I do so.
  • Rhino. It allows using JavaScript in a Java environment, and even compiles JS into Java class files. Might come in handy someday.
  • The .NET environment. Simply knowing about some of the big components like MCF and MPF. And, hey, some people think C# is the best language, period. And they make good points, too.
  • Googly Analytics
  • New Relic

Node tools:

  • Grunt
  • Yeoman
  • Bower
  • npm
  • Karma
  • Other Node packages…

Application hosting/PaaS/IaaS/XaaS

If I want to create apps and not have to worry about the painful details of how to set up servers and all that boring stuff, I will just have to pay someone else to manage it for me. No bigs. But I can definitely try to learn more about that sort of thing.

  • Heroku
  • Amazon Web Services
  • MongoLab (free MongoDB database? Yes please!)
  • Cordova (formerly PhoneGap), Titanium, or Xamarin
  • Firebase
  • Socket.io
  • Meteor

Languages

While I plan to make JavaScript my primary language, I still need to have at least some basic familiarity with other languages, their strengths, and the popular frameworks/libraries that are used to promote faster/better development.

  • C++. It is the father of the modern object-oriented language; I should be familiar with the basics, especially memory allocation and management. I know Java so I’m already 80% done.
  • Clojure
  • CoffeeScript
  • ECMA6 for the future of web development
  • Python. Already know some stuff, but I have forgotten much, and I’ve never used it in a desktop or backend application, only stand-alone scripts.
  • Passing familiarity with PHP, Hack and HHVM. I hate PHP, but apparently some people like it. Maybe the VM and the Hack language/framework make PHP decent?
  • Ruby basics. Ruby only runs 2% of the internet, but it’s pretty popular among the people I’d like to work with. I should re-learn the basics and learn more about Ruby on Rails, the IDEs, frameworks, libraries, etc.

Databases

This stuff will never go away. I’m fairly confident in my limited amount of SQL knowledge and quite confident in my knowledge of relational DBs, but I could do with some skills in this area.

  • MongoDB
  • CouchDB
  • H2
  • mysqlite
  • Embedded database that can run in mobile apps

This is all quite a list, isn’t it? Can one person even get to know these things relatively well in a few months of self-guided learning? Could I build a small demo app with each one in a year? I don’t know. But I do know this: if I don’t stop typing now, this list will just keep growing.