When I started my gap year I didn’t really understand how to learn.
I knew I want to learn the Spring framework and a few of its sub-projects but I just didn’t know how to get started.
I soon found myself jumping around to multiple things at once, trying to read four books at once, which didn’t work!
After banging my head trying to figure out how to simplify my learning style, I figured out how to learn enough to get it done and achieve my goals.
How to get started?
When you are starting out as a software developer there is a lot you don’t know, yet.
I say yet, because you can quickly pickup on those concepts very easily using the technique I’m going to share with you.
It’s important to have a plan in mind.
What do you want to achieve in X period of time.
How are you going to learn it?
What should you learn?
These are all questions you need to consider before starting your journey on learning, for example, a web development framework.
Define your achievement
My achievement I am striving for is to know the Spring Framework, by the end of this year.
I can’t possible know the ins and outs, just yet, I mean is to be competent with it.
That said and done, define your achievement.
It could be as simple as creating a web app, with a data-store, login-pages, feeds and so one.
Okay, now visualize of the things you’ll need to learn in order to do that.
How much do you know?
Would you believe me if I said to you that I build a partially functional application in C# before I even knew C#?
Well I did know how to create classes and work with literal a bit, but I did it!
I just figured it out as I went along.
Did I need to write a log to a file? Just look it up on stackoverflow, man…
Did I need to implement multi-threaded processes, just look it up on stackoverflow.
And so on.
Sure, the programming principles/design patterns (unheard of) and the code written was near to junk.
But I figured it out.
Everyday for hours and hours I worked on this application. I did it for a year.
Unfortunately, I didn’t complete the app because of some architectural design flaws and requires knowledge of reverse engineering software, from within C#.
Other than that, most of the application worked!
Sure it would be a team effort to finish this thing, but I did my part!
How much do you know?
When starting to learn something and wanting to getting started, ask
yourself: How much do I know?
Now it may not be apparent at first, but this can help you shed a lot of the fat away and focus on what’s important.
What does that mean?
Well if you know how to use the Java Persistence API (JPA) already for mapping your objects to the database, but you aren’t so confident with the template engines, start with that!
Start with the things your don’t understand or know how to implement.
Stick to that as your primary focus until you’re competent enough to move to something else.
Don’t fall into this trap!
“Any man who reads too much and uses his own brain too little falls into lazy habits of thinking.”
When you are learning about a particular thing it is easy to fall into the dreaded Wikipedia hyperlinks trap. (You know, when you open many links from the original article, in new tabs)
And your curiosity like eating junk food, sure it tastes good in the beginning but you’ll eventually end up crawling back to your lean diet of learning one thing instead.
Although curiosity is good and can serve you well, let’s not get over our heads and jump around from donuts to chocolates
Only handle as much as you can cope.
I used to struggle with this a lot until I set a habit for only the weekends
I could easily find myself jumping around from databases, RESTful APIs, template engines, etc on Wikipedia.
By jumping around you can’t give you’re self the opportunity to sit down and really focus on one task at hand.
Plus you aren’t really understanding how all of these things you are reading work and most importantly how to implement them.
An exception here may be that you are just starting out and don’t know what’s what. So maybe indulge deep until you find your answer.
I’ll discuss how you can use it as your advantage in a later section.
Learn just enough
Sometimes you need to throw the paint at a canvas before you can use the paintbrush.
That’s called art.
How much should you learn before you can start programming and build an app?
Like I mentioned in the How much do you know section, ask yourself: “Where do I need to be to get started?”
Maybe you just know Java so far and want to build web apps, like me.
So, in order to do that try to create a simple “Hello, World” application that you can view in your web browser.
Once you have done that then you can move one to more challenging things like, Registration forms and pulling the form data from the POST request.
Once you have that done and dusted, move on.
Over time as you practice you will think of better ways to implement things and change old functionality to be more better suited.
As you move along your path and learn more, did you notice the other things you learned as well?
So let’s Just Start!
Lets face the reality.
You are not going to succeed if you just read tutorials, books and watch videos if you don’t implement it yourself.
I made this mistake for 5 months!
I never practiced. All the things I were studying are inevitably useless if I cannot implement it.
I know learning can be addictive and it is easier to read and understand, then read some more.
But sometimes you just need to put down the book and play ball!
That being said, when you read about something and you learn how useful that could be, don’t just read on! Look up tutorials on the topic, examples and the such.
Don’t stop until you have figured out how to implement it!
This is just such an important step!
Step 1: Do whatever it takes to just start with a basic working app.
Learn from others
I used to believe the book was the only way!
Well because the content was so rich and easier to understand than video tutorials.
But the book is only one perspective.
You need to have multiple resources in order to fully understand it all.
Maybe the author wasn’t absolutely clear what he/she mentioned, or you simple don’t understand.
Take a break!
Seriously, take a break and watch a YouTube video or look-up a tutorial on the matter.
Tutorials and videos are often much more simpler and easier to understand because they come from multiple perspectives
After a little digging you find the gold!
So you have watched a couple of YouTube videos and read a few examples.
Come back to the book, and WOW!
You get it now, right?!
Don’t strain yourself trying to re-read a paragraph over and over again trying to figure out the context.
This approach is simpler and easier to do!
Learn by example
Sometimes examples aren’t enough.
Real applications are a good approach to looking at working code.
For Java programmers, you have Java Code Example search engine, where you can search up an annotation, library or class and see how it’s implemented.
How cool is that!
Just look at example code, learn from others and practice.
Practice, Practice, Practice
One important thing you need to keep in mind is always practice!
Practice like your career depends on it!
What ever you learn, try figure out how to implement it.
Otherwise, your examples and exercises thought out in your head will build up and overflow!
“Okay, let’s go back to square one and start from the beginning” –is what I mean.
I am victim to this endeavor!
I just realized the other day, I haven’t written code in 9 months.
Sure, I have played around with examples and test apps –but that isn’t true programming.
True programming is when spend all night and all day working on your app!
It’s the eager drive you get as if there was a deadline approaching, but there isn’t.
True programming is the love for programming!
It’s when you can just SHRED your guitar and rock on all night!
When you discover this urge and need to program you can know that you are a programmer at heart!
I recently looked at my code from 9 months ago and I was overwhelmed, by own code! –I will pick up on that level again soon, so don’t worry.
Be careful with what you do.
I subconsciously gave up my programming skills to read books and learn as much as I can about enterprise web applications.
Don’t fall victim to the endeavor like I did!
Build a freakin’ app
Remember my first C# application?
I “learned” C# because I subconsciously forced myself too.
I wanted to build an application that solved X problem.
Not knowing C# didn’t stop me. I just pieced together existing code and tried to figure out how it worked, then change it to my liking.
I was scared of documentation.
It was so overwhelming to read thousands of words or even a books worth to truly understand something.
I just wanted to code, and this documentation was going to stop me!
That was a mistake on it own.
Sure you should find a good balance of coding and reading, but not one or thee other.
Come up with an app idea
Spend sometime and think about what you want to build. It can and should be as simple, as a todo list application.
But think about how you’re going to create the UI, draw it on paper first.
Think about how it’s going to interact with the back-end.
You don’t have to design a user diagrams and references, it must be simple enough to be a rough idea.
Then start small with the login and registration, for example and work your way up to completing the application.
When you get suck, you can always rely on Google to help you with your problems.
Give yourself time and patience.
It’s not going to be completed by tomorrow.
But eventually you’ll finish it and you’ll be proud of what you have accomplished.
Bonus: Add this application to your GitHub repository and put it on your portfolio!
Integrate as you learn
Get rid of this idea!
Fully understand that you do not need to know everything and all the best practices before you can build an application.
If you do, you won’t ever understand how to implement them and become the better programmer you wish to be.
You first need to do the grunt work before you can become a pro!
Like mentioned above, I used to believe this idea.
At the back of my head I still knew that I was slowing loosing my skill to code and practice.
I was addicted to reading books and learning as much as I could before I coded.
Again, remove the idea that you are going to learn enough and just one day you’re going to build this big system with logins, databases, templates and the works!
When you actually take the stance and decide you are, you’ll fall short back to square one!
When you start to learn a new framework or programming language, build an app.
But don’t stop there! Continuously work on it, add to it as you go one and refactor your code to better suite your new advances.
As I mentioned earlier, you need to integrate all that you learn and truly practice!
Slowly but surely you’ll learn and understand new components of a system and as your do, piece them together to form a working app.
As you go on slowing integrating to the system and you app becomes more complex, stop!
Refactor as much as you can.
Refactoring is the process of bettering your code without adding new functionality.
This means to move interfaces about, change things that you now see in a better way, and so one.
Once you have finished this application, start a new one.
Come up with a new idea and implement it.
Remember, the more you practice and learn, the better you become!
Tame your curiosity
Your curiosity is like eating.
During the week, I stick to my lean diet plan of just learning Spring MVC, for example.
Learning Spring MVC should be your priority and full commit to it during the week.
Sure you are learning very leanly and at a steady pace.
But sometimes you just got to feed that curiosity within you. I call this cheat weekends.
Because damn! Sticking to Spring MVC throughout the week tends to get boring!
I like to plan my cheat weekends.
I am currently curious about databases with Java
So last weekend, I just read as much as I could find about JDBC, JPA, JDOs and the works!
I watched video tutorial examples on it, I read about the types of Java drivers, and so one.
I truly indulged in Wikipedia and all of it’s hyper-links, for up to 4-5 hours at a time!
Granted I still try to plan it out a bit. I will create a Task on KanbanFlow and divide that up into certain topics, and go from there.
Throughout the week, when ever a new interest just pops up in my head I write it down. Specifically I create a task in my Curiosity Queue.
Although that sounds very interesting, it’s a topic for another blog post!