Ideal features would include:
- a regular review of the things you've listed to see if they're still relevant and to help you prioritize
- a way to see what's trending amongst everything you've listed (ex. I have three front end web frameworks on my list but React is collectively popular, so perhaps I should start there)
- it could notify you if a new (good) book / blog post is published on a topic you're interested in
- you could compare with your friends to see if someone you know has learned it recently or to sit down and hack together
- it could share a common list of subtasks across users -- for example, starting with Django Rest Framework might consist of: (1) doing the python tutorial + (2) doing the Django tutorial + (3) doing the DRF tutorial
In the case of this project, I'd pushed it off because I thought others wouldn't be too interested. Nothing like a little HN community validation :)
I think I will build it :)
I actually wanted the same thing but for Spotify. I settled on making two "_To Listen" playlists: one for singles, one for albums. After I listen, then I delete from that playlist.
Writing that out makes it sound as somewhat awkward as it is, especially (quickly) on mobile.
There is a public ranking system for users based on points. You receive points for watching videos, completing quizzes, and doing code challenges. It's pretty meaningless, but these points are categorized based on what type of track they were earned from, so you can see what people are most recently learning.
They don't tailor their notifications to specific niches. You always get a Netflix like notification whenever they upload new content. Their feed doesn't have the option to sort by what's trending/popular either. It's a relatively expensive service and is criticized for being pretty dumbed-down in how they deliver learning material, but I think it can be useful.
What I'm envisioning is something agnostic of any particular learning platform or the content you choose to learn from, at least to start.
Thank you for the insight.
That's pretty much me. Someone will say something, or I will see something somewhere and a little bit of looking it up to find out what was being talked about might pique some interest and off we go.
Interestingly, this doesn't happen in my day job :(
I think it's much easier to learn things when you have a goal because you have to learn tiny nuggets of knowledge that are useful. I find learning something without the context of how to apply it to the real world is very difficult, so I generally don't just go out and learn things (tech-wise) without a legitimate usage in mind.
Really, if you "don't know what you don't know", you need some type of trusted guide who understands your aptitudes and motivations and can recommend a path of study or provide some clarity of thought.
There is absolutely nothing wrong with fumbling around in the dark and discovering stuff on your own, but if you're asking this question, it means you're resource-constrained and need some clear goals to work towards. This is where a mentor or at least a colleague can help out a lot. In addition to providing guidance, a mentor can critique and analyze the direction you're taking.
"Todo" lists are perfectly fine tools for mastering some narrow focused topic or for achieving completion of a small project, but they're not a strategic tool. Deciding what to learn next is very much a STRATEGIC question, and those kinds of decisions benefit greatly from dialog with an expert who cares about your success.
Unfortunately where I work there aren't any people that would fit that bill. Finding a mentor outside of work is difficult for many reasons.
From what I've found this is a pretty common problem.
It might work if the pupil is willing to just do the bidding of the master to relief him from his chores, so that the master has incentive to spend effort on pupil's education. I surmise so few students want to play this role that there is no cultural norm to draw from, the concept is too alien.
It's a pity, too. There ought to be a way to transfer knowledge and skill from one generation to another.
But I think you'll find that those who mentor others don't see their efforts as directly "transactional". They mentor others because they're expressly passing on the knowledge they've gained to the next generation. It is an altruistic act.
- create a list of all the tools/products/whatever you use at work
- rate them from 1 to 5 (5 you are an expert on this topic)
- then pick the most important one for your job and try to increase your grade
The grade is totally subjective, but still it helps.
For the "next big thing" I take a look regularly to the thoughtworks radar [1]. That's a nice overview.
If there is something that can speed up my workflow, I learn it. If it improves my applications speed without much time to implement / learn then I work on that.
For new shiny Javascript libraries I really have held back to see what the winner will be; backbone used to be the go-to lib, ember (tried to learn but it changed a lot in the early days), angular (decided not to invest any time into it).
There are 24 hours in a day, don't try and learn everything, just try and be productive with the tools you have and the ones that will get the job done for you.
My time these days are spent learning Nepalese, React and trying to build a business in Nepal....keeps me busy.
That generally is what drives what I learn. I'm about to start getting deep into BPM2 and Activiti because it looks like it will solve an organizational problem that I'm currently observing, just as an example. Otherwise it's not really connected to anything I would be doing otherwise (although there are a few potential use cases if I understand the system the way I think I do).
Since I'm the only dev and I have to do back end and front end I realised that I was weakest on the front end (particularly JavaScript) so I made a concerted effort to learn JavaScript properly since apart from picking it up organically for years I'd never really studied it.
The funny part (to me at least) is that while I'm never going to like JavaScript I dislike it a lot less than I used to once I understood the underlying structure better.
Javascript: The Good Parts (though this is a bit full on if you are really just getting started).
Reading the source of popular libraries as well in a good IDE so you can jump around and get to where stuff is defined/created.
Though it's not cheap, I think it's the best investment I've made in my own professional development.
This being said, I also own a Kindle Paperwhite and use it at least an hour a day for reading non-technical books. I can't recommend that device enough.
I have a very sensitive mind. I can't concentrate on multiple projects at the same time. For example: If I'm working in a day job, I can't work on a side project efficiently, I can't concentrate on both my office work and side projects. If I do, My employer could easily figure that I'm churning out.
So, If I want to work on a project.. I'll make sufficient money then I quit my job and spend next coming months fully-fledged on my project.
When I want to learn something new I pick an item from the list and work on it (usually some idea I came up with). My preliminary research efforts often help me realise an idea or it gives me a chance to compare two different learning sources. I also try to create something using what I learned. Through craft I feel like I draw more from the learning experience. The outcome can also be that I need to find better references or that I simply want to learn something else.
The most difficult thing is getting started. I find it useful to be systematic about it by explicitly devoting time to it. Once you have a system in place you like it eventually becomes a habit. Also note that it is helpful to break tasks into small subtasks. Having a feeling of accomplishment leads to a more positive experience of the learning process which further leads to increased learning drive.
Note that my process is not much more sophisticated than "this is interesting". However, instead of acting on some hunch in the moment I act on observations which I gather over time.
The items on my list are half concrete tasks and half topics to learn. The subjects are very diverse, I have a broad range of interests.
Here's a few from the top:
1. Learn enough classical mechanics to do a stable n body simulation
2. Build a piece of furniture with mortise and tenon joinery
3. Implement a prototype compiler for that GPGPU/shader programming language I've been dreaming about for years
4. Get an Indian fighter kite and learn to fly it
5. Implement a multiple revolution Lambert problem solver to plan the badassest Kerbal Space Program mission ever
6. Write a simulator for gyroscopic motion and compare the results with my toy gyroscopes.
That's enough to occupy my Saturdays for the next five years. Both, the sunny and the rainy ones.I then review these lists periodically and when the time is right, they naturally move into my "Active" list in one form or another.
- A complete paradigm shift. I want something that will force me to rethink how I approach problems. I want to force my brain to develop new pathways, so to speak.
- Something will at least a minimum of documentation and community online. I've had to abandon dreams of learning some really awesome language before (ATS) because there was simply no resources and that would make my progress too slow.
- Something that could be fun to use in a side project. I need to be able to find occasions to use it. I learn best by doing rather than by only reading. If I can't think of an application, then I won't be able to become proficient, so I'd rather learn something else.
- And finally, it has to be something fun that feels like falling in love with programming all over again.
EDIT: I usually don't pick more than 1 technology to REALLY LEARN per year, so I don't make these decisions lightly.
* Says that the rest of the world is doing it wrong and they will fix the situation with this "change of paradigm".
* Presents their products as a "social movement" that's "challenging the industry as we know it".
* Promises 10x productivity.
* In general, bases their success on attacking others. Specially if they say things like "everybody knows exceptions are like cancer".
* Uses grandilocuent names to call a two thousand lines library.
* The resulting code looks like gibberish. The most likely a child can understand it, the better. It it's directed at the elite programmers, bad.
* Doesn't put enough care on tooling.
Edit: OK, it's a very negative answer, but it's effective. It quickly discards 99% of shiny new things.
Also let me insist that these are heuristics I apply to what I use for my own consumption, usually to create private tools that will make my life easier, or just to learn something satisfying.
That said, I bet you know Haskell better than me. The fact you singled it out asking about it makes me suspicious it shows at least one of the red flags :-)
If that's right, I don't care how good it is.
For me C# is at least twice as productive as Objective-C, so I suspect there more where that came from. I'm on the lookout for another 2x boost. But the farther down that road you go, the more isolated you become. It's a bit of a balancing act between individual productivity and being able to hire and work in groups, or to find help. Perhaps
https://developer.amazon.com/public/solutions/alexa/alexa-sk...
If I have two topics on the top of my list, and I expect one of these to provide new mental tools, or meta insights about learning or cognition, I'll pick that one.
I also give a higher priority in general to techs that will cascade into improving my speed on future projects in the most generic way. For example I consider that learning how to automate something is never a lost cause, even if I can do it manually at the same speed, because it increases my knowledge about automation, which will be useful down the line.
I also keep track of various things which come up when learning something and in-turn learn those topics.
Everything from making a cpu from 74 series logic to writing a toy compiler. If you don't have much free time, just researching how to implement various parts of a computer works is good as actual implementation takes a large amount of time (eg: the cpu required learning basic electronic skills). Now that I've gone through a basic computer stack, I'm doing that bits that interest me in more detail.
I've seen a lot of people that flit around and start this and that or take an online class but then never build anything with the technology. After a year or two they are pretty much no better off for the effort than if they had used the time to drink beer at the beach.
So my philosophy is now to spend a small amount of time investigating. How useful is this to myself or an employer? How interesting it? How much time and effort is going to be required to learn this well enough to work it? If it's more than I'm willing to put out or the thing has limited use or interest then I don't even bother. I know it's there if I want to come back later. But if I'm not going to learn it to the point it becomes a useful tool I generally don't bother starting.
I have found that half efforts are about half the effort of a full effort but they don't produce half the results. So they are by in large a waste of time and energy.
I'm presently learning predicate calculus and formal specifications of software systems. I came to it by hunches: software engineering should be more like engineering because companies like Yahoo! Japan are building earthquake notification systems on OSS infrastructure and the keynotes at Blackhat suggested it was a requisite for this industry to move forward. It turns out the math is beautiful and it helps me design better software and I'm only just getting started.
It has also added new things to my list of things to learn such as the refinement calculus as well as alternative modelling systems like Event-B.
Another categorisation (especially for languages) is to pick a paradigm that is different from your day job. Picking a functional language is the most common example.
I do not always know what each piece is going to be, but I find taking this approach to be worth while.
When I an commuting, I sometimes listen to podcasts from experts in the subject area I am trying to learn.
At my day job, I have little time to learn, so I have to make a concerted effort to always be learning outside of work.
There are sometimes exceptions to this, when I just want to learn something for fun, do it as a recreational activity.
Is there a better way?
i just have one simple saying about the subject selection which i wish to learn "when you have removed a subject which is not a immediate requirement , what ever remain not matter how difficult it is, must be learned".
Also i have "This is interesting" moments, from time to time.
Work on my own idea.
Another option; work on freelance projects. Earning could be a good motivation to learn new stuff. At least it is for me.
I believe something can be useful when I need to know it or when it is a good basis for other more applied topics.
It was never useful to me and I remember zero content from either of those now.
A First Course in Abstract Algebra - rotman
[edit] By learn, I don't mean simple regurgitation of the facts or some superficial thing, I'm talking about extended study and efforts.
Let's say you have very limited time to learn ...
I think that is probably the case for all of us. Personally, I recommend you apply some time to "optimizing learning". I have been improving my ability as a speed reader for 18 years (not the "read every word faster with eye exercises/gimmicks but strategic skimming/scanning)[1]. My strategy allows me to eliminate books that would result in wasted time in a couple of hours and rip through large volumes (with a very specific method of note-taking) in anywhere from a weekend to a few weeks (depending on depth of topic/my current ancillary knowledge level more so than the length of the work). That may not be the best approach for you, but the nice thing about focusing on optimizing your learning is that it allows you to focus on a topic in addition to getting better at learning in general.
... not doing much learning in your day job.
This is one of those areas worth optimizing as well. If your job is dead-end, single-focus, and "not brain work", you should start looking elsewhere as soon as you can. In programming, there's often opportunities to study the corners around the area you're specializing in. If it's possible with your current workload, try to increase this as much as possible.
What is your proces for picking topics to learn (other than "this is interesting")?
You hit the main one, but the list is as follows in priority (which falls well below the first "this is interesting"):
- Is it something I can use right now on a problem I want to fix for myself.
- Will it give me a greater understanding of the craft that I have chosen as "my life mission" or "my career".
- Is it something that is narrowly related to my career, but far enough away from it that I'm unlikely to encounter it in my day-to-day job.
- Could learning this reward me financially by using it to create a sale-able product based on the knowledge I've gained? I put this at the bottom because I make a good enough living currently and I enjoy my job enough that if I were to have a side-income that replaced what I currently make, I'd still not want to leave my current job so the choice would likely be to sell the side-business, support it in my spare time (a non-starter) or do the side-project full-time.
The result of the above bullet points led me to get into embedded/IoT-related devices. There are too many things I'm interested in solving to even list that relate to the embedded space. It involved researching and learning C++ (again), which I had a long-expired background in, and also served to give me experience in a language I have occasion to use in my day-job. It's unlikely (but plausible) that I'd be developing something in the embedded space in my day-job, but if an opportunity presented itself, I'd be prepared. The solutions I'm working on could certainly result in a product I could sell. It hits all points.
[1] "Speed reading" has a bad reputation as of late, though a few articles have pointed out the idea of skim/scanning as it relates to speed reading. It's a very useful way of increasing the speed at which one can learn from a book, allowing multiple "reads" of a text at varying speeds/intensities. It is, however, something that took me 10 years to get good at and I think that's one of the reason the gimmicks are getting such a bad reputation. They promise an unrealistic increase in reading speed using an unrealistic set of techniques in an unrealistic time frame. Reading is a complicated mental operation and requires focused practice to increase both speed and retention/learning and in my case involves a strategy coupled with multiple reads of a text with a lot of note-taking. It is mentally exhausting for me when I execute and it was a very long process to get to the speed/retention I have today, but it works wonderfully.