In the previous posts we saw the importance of being a full-stack developer and what it means to be one. As important as it is to realize what we should aim for, it's equally important to have a sense of the work and effort required. Becoming a full-stack developer isn't child's play - it requires sustained effort and diligence. Lots of hard work and steep slopes lie ahead, but they shouldn't intimidate you. The steep slopes are not insurmountable; they just need a certain amount of planning, discipline and technique to climb the mountain.
I think there are two keys to climb the full-stack mountain: study and (deliberate) practice.
Study
Programming is one field in which new things are happening all the time. New libraries, new programming languages, new design paradigms and sometimes big tectonic shifts like cloud computing and big data. For a programmer, studying is not optional . What's optional is the choice of studying in a systematic way or using the spray and pray approach. Unfortunately I started my process of study with the latter approach. I look back at that time as one where I put in a lot of effort but did not gain enough; a huge investment with little return. Fortunately I can share that knowledge and prevent others from walking down that path. Just like we cannot randomly write lines of code to build software, we cannot randomly read stuff to build our knowledge. Some amount of deliberate planning and course correction is essential to both.
If you (like I used to) are spending a lot of time reading random blogs and articles about all sorts of things related to programming then I suggest you ask yourself if the results are satisfying. Are you building a strong foundation? Do you understand underlying concepts? Is it helping you write better code, or design better architectures? If are indeed satisfied with the results then I'd say this approach is working well for you and you should continue using it. On the other hand if you feel like you are spending huge amounts of time, but often wonder what exactly did you learn. Or do you feel like you are not able to remember most of what you read a week back? If your answer to these questions is yes, then you need to take a break and ask yourself why this approach is not working.
Investigating my own issues with learning revealed a major flaw. I was measuring success with how much I kept up with, and not how many connections I made with existing knowledge and how many core concepts I could recall later. Even though I understood most of what I read, I was reading way too much random stuff without making the right connections to existing knowledge. These connections are very important because they help us create a strong foundation and also help in recalling knowledge. Treading on this path, very soon I hit a point of diminishing returns, where doing more was actually making things worse.
A better approach would have been to start with understand core concepts, connect those concepts with what I already knew and use some strategy for spaced repetition to improve recall. We'll discuss these in detail some other time very soon; for now I mainly wanted to show that a haphazard approach to learning can actually be counter productive, and that a better approach does exist.
Deliberate Practice
The 10000 hour rule, suggests that it takes 1000 hours of practice to achieve expert level performance. But not any kind of practice will cut it here; what we need to engage in, is deliberate practice.
You do deliberate practice to improve your ability to perform a task. It's about skill and technique. Deliberate practice means repetition. It means performing the task with the aim of increasing your mastery of one or more aspects of the task. It means repeating the repetition. Slowly, over and over again. Until you achieve your desired level of mastery. You do deliberate practice to master the task not to complete the task. -- 97things.oreilly.com
The same webpage ends with a statement that really captures the heart of deliberate practice - Deliberate practice is about learning. About learning that changes you; learning that changes your behavior. Good luck.
As the article suggests. the main aim of deliberate practice is to improve performance in one particular area. The goal of a practice session is not to complete a task, but to understand it and get better at it. This is an important topic and we will talk a lot more about it in future posts. In the meanwhile I'd be delighted to have you guys do some practice using our online IDE. We are really passionate about your learning and practice; that's why we built an online editor - so anyone with a device and Internet can practice coding. We have exercises in a wide range of programming languages like
Python,
Java,
C#,
C++,
PHP and
Ruby. But that's not all, we also have exercises in
SQL,
Android,
iOS,
jQuery,
Angular, and much more.
We have a lot more coming up in future posts about the strategy of learning, how to practice, as well as what you should learn to build a solid career in software development. Stay tuned...