This post has moved to a new home! If you're interested in Ivan's technology-related ramblings, please see blog.jonas.ninja!
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.
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
- 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)
- Special-purpose libraries
- n3 (d3 for Angular)
- Mapping: Leaflet
Basic Web technologies
- 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.
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.
- 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.
- 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
- Other Node packages…
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.
- Amazon Web Services
- MongoLab (free MongoDB database? Yes please!)
- Cordova (formerly PhoneGap), Titanium, or Xamarin
- 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.
- 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.
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.
- 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.