The internet is an amazing tool for learning but the sheer amount of unorganized sources can be daunting. I love to learn new things but often find diving into new topics hard. It’s not that don’t have the motivation to learn, it’s that I don’t know where to begin. I often turn to the web and search for “learn ’the thing I want to learn’”. This can lead to conflicting advice or a mind boggling amount of data. For concrete examples, I’ll use my own quest to learn to program throughout.
The More You Know, The More You Know You Don’t Know
When I first decided to learn to program I thought it would be both hard and easy. Hard to learn the language and easy to create things once I knew it. It turned out to be almost the complete opposite. I had no idea the breadth of skills I would need to do what I want to do. Finding where to start can be daunting.
My Quest To Teach Myself How To Program
My First Attempt
Years ago I decided I wanted to write iOS/OS X apps. So I turned to Google.
- The first advice I got was to learn the C language.
- I spent 30 minutes trying to read through a wiki about C.
- I gave up.
My Second Attempt
About a year later I decided to try again. I once again turned to Google.
- I searched for ‘What’s the best programming language to learn first?’
- Different sites gave different advice. Some said HTML and CSS and others said Python.
- I worked through the HTML and CSS courses on Codecademy.com but I wasn’t learning what I wanted to learn.
- I tried the Python course but gave up because it wasn’t what I wanted to be doing.
My Third Attempt
About a year after that I decided to try again. Swift had just been announced and I had so many ideas for apps that I wanted.
- Since Swift was in beta and there weren’t that many resources for learning it, I turned to Codecademy once again and did the Python course.
- After Codecademy I had no idea what to do next. My plan was to get really good at Python, then switch to Swift. I tried to continue with Python but I hit road block after road block. I couldn’t find a text editor I liked, there were so many resources available I was unsure which to pursue and worst of all it wasn’t really what I wanted to do. I would search things like ‘What can be built with Python?’ and the results were cool but not what I wanted to do.
- So I switched to Swift
- The complexity of Xcode and the difficulty I had finding resources online led me to Treehouse.com
- I finished all the Swift courses and started looking for what to do next.
- I knew the basics but there were (are) so many gaps in my knowledge that I had a hard time trying to figure out how to get to the next step.
- I am just starting to learn how much I don’t know and it is daunting. The worst part is being unsure of what to do next.
So Where Can I Turn?
I have looked for a guide to all the guides/resources available on the web but I haven’t found anything close to what I want. Even subreddits like /r/iOSProgramming and r/learnprogramming don’t offer what I am looking for. The problem is not that they don’t have the information I need, it’s that it is all over the place and it’s hard to find what I should do next. I still think subreddits like this are amazing places to learn but I think the system in place isn’t designed like I think it should be.
What I Would Like
I want a user curated system that allows people to have the guides/resources from around the web organized into skill trees that users can follow to learn new things. To get started users fill out a simple quiz I’ll use programming as an example:
You select that you want to learn to program and it gives you several options:
- I want to develop for iOS/OS X
- I want to develop for Android
- I want to develop for Windows
- I want to develop for Linux
- I want to work with large data sets
- I want to build websites
The user chooses one and is given a few more questions like:
- Are you brand new to programming?
- Do you already know a programming language?
- How experience would you say you are?
A skill tree would then be built for them. The tree would be a collection of guides/reading/resources from around the web that as you completed you marked off. If they selected an option that is generally regarded as unfriendly to beginners they are started with the basics in an another language. Once they finish one level they move to another and do the guides/problems/read the material for that level and as they progress they are more proficient. The goal being, once they finish the skill tree they will be masters at that skill. The skill tree never leaves you wondering what to do next, it is a comprehensive guide to learning the skill. You may be wondering why you would need a skill tree, rather than just taking users down a singular path. I’ll use learning to build iOS apps as example. Here are some of the things you probably will need to learn:
- Either the Swift or Objective-C programming language
- Using Xcode
- iOS Human Interface Guide
- Using Git
- Using API’s
- How to properly test your app
- Using Core Data
- Interfacing with JSON data
- Core Motion
- General principles of object orientated programming
- and many more
Users Decide What Is Part Of Their Skill Tree And What Isn’t
I want to learn how to program iOS/OS X apps but have no wish to make games. The guides could be arranged into different skill trees for the users needs. Some guides/resources may overlap and be on multiple trees but the path a user takes will get them to where they want to go.
Customize As They Learn
When I started to learn to program I knew I wanted to make iOS/OS X apps, that was about it. I knew programming languages existed but had no real idea of which one I wanted to learn. I had no idea what kind of skills and things I’d need to learn. That is why as a user becomes more proficient in a skill they should be able to add custom constraints to the guide they are following. Areas of interest would be for things you want to dive deeper into and constraints would be for things you want to avoid. For example:
I want to learn programming so I add iOS/OS X and Swift to areas of interest. As I learn more I add Xcode to my area of interest because I am having trouble figuring it out. I keep going and realize I don’t really need to learn any networking stuff right now because it doesn’t apply to what I want to build, so I add a constraint. I keep going and realize I do want to learn networking, so I make it an area of interest.
The skill tree could even have warnings that you aren’t well versed enough in a certain skill to do this branch and show you what you need to learn.
Different Difficulties For The Same Skills
Have you ever read something and thought, “Well that was over my head”? It would be beneficial if this system would allow users to say a guide is too complicated and be given similar guides that are geared towards more novice users. Conversely if someone finds something too easy they could say they want something harder.
So How Are These Guides Built
This system is just a framework for guides/resources from around the web. As users find useful stuff from around the web they add it to the appropriate skill. Other users can up-vote/down-vote them so the best guides/resources float to the top. They can also rate guide/resources by degree of difficulty. People can create custom skill trees for different skills that can be incorporated into users skill trees. For example, if a user wants to build a weather app, they can tell the system that and it adds the guides/resources needed to build the app.
Users can vote to change skill trees if they feel that they are out of order, or teaching useless skills. As users become more highly regarded their suggestions are given more weight.
The Potential To Make This Sort Of Education Official
I love self learning. I spend my time teaching myself new stuff or learning, useless, facts. I am not alone but not everyone is like me. People want credit for what they learn. Employers want to see your quantifiable degree and give less weight to learning skills on your own. I could see a system like this building up a legitimate certificate of completion for various skills. The system partners with the sites that are being linked to and they build a way to give you credit for finishing online courses/books. We have services like the Khan Academy, MOOC’s, Treehouse, Lynda.com, iTunes U and a plethora of other sources for learning online. Why not give users real world credit for completing them?
Education For The Poor
If you gave real world credit for completing these courses anyone with an internet connection could gain an education that could equal that of an expensive university.
Making A Community Around Online Learning
Some online resources have forums or chat rooms but I think by grouping all of the communities together in one place you have a much greater chance of creating a thriving community. Ironically, I recently found out about an app, called Engrami, which does something similar to this. If you are currently in a MOOC or similar course online, check it out.
Helping The People Who Know So Little They Don’t Even Know What They Want To Learn
What about people who don’t even know how to describe what they want to learn. For example, my mom wants to start editing photos but has no idea where to start. She types in, “I want my photos to look nicer” and is given a good general guide on photo editing on the device she owns.
Would This Compete With Something Like Lynda.com
Would something like this compete with Lynda.com? (Lynda.com is a site of video guides created by professionals.) My vision isn’t to compete with any site, merely to group all online resources together to create learning paths for users.
I am starting to feel like a hippy. Many of my posts are becoming about connecting things to accomplish something greater than the individual parts. (Connecting apps, connecting guides, connected devices, etc.) So screw it, the world would be so much better if everyone like worked together, man. Seriously though, imagine the potential of a system like this. People could have a concrete guide to learning whatever they want. No more searching the web for guides of dubious quality. No more frustration over not knowing where to go next. No more questioning what to learn next. People would spend less time finding what to learn and actually learning. This could be the most powerful idea on this entire site.