Saturday 2 May 2015

Introduction

Hi folks!

Welcome to the new blog on the block!

This first entry will be on motivation and training.


The motivation to continue learning in your spare time is required when one wants to be the absolute best that they can be. If you are working a full-time software development job, then do not feel too pressured into spending your spare time "working", as you are already spending most of the day doing so.

This entry is aimed more at those who want to know "how" to study, how to manage their busy schedules as software developers and what to avoid when you can (Disclaimer: I'm from Ireland, so bear cultural and legal differences in mind).

Failure

This is an easy pitfall for those coming out of college to fall into (Or anyone really, this is just an example of my experiences). During my time as an undergrad, I noticed that the vast majority of students experienced complete burnout in their final year, largely due to the pressure of a final year project. 

This can leave a lasting impression on students, as they perceive their countless setbacks as utter failure. When they begin to associate this "failure" with software development, they will find it quite difficult to get into the swing of enjoying development again. It is a cruel kind of spiral to fall into, as failure should never be treated like this.

The students who ended up doing best in their respective classes never gave the impression of failure. Bear in mind that they never gave the impression that they particularly LIKED spending so much time working, but they'd always make time for their fitness activities, or whatever they usually did. They didn't go into "misery mode" and spend every waking second working on a project that they had convinced themselves they hated,

The kind of mindset used by the better students didn't block any perception of failure, rather it didn't allow for it. If you're working on a project right now that you cannot stand to work on, I guarantee that you will use every method of procrastination to draw out your inevitable return to the project of doom!

But it doesn't have to be that way. Sometimes we need to be reminded of what inspired us to create a piece of software to get over this "coder's block". The first thing one should do is identify why they dislike the project. I've found that it is a fear of failure that associates negative connotations with the project. One's ego is a fragile thing of course, so we use procrastination to protect ourselves from the perceived stench of failure.

This is absurd of course, but  failure is a natural thing, We fail time and time again throughout our lives, over and over again. If we didn't, we would never truly learn anything. Dealing with failure is a vital part of the working world, so accepting it as inevitable, and fixing it is a skill that will set you apart from everyone else.

You don't have to enjoy the work, you simply have to not hate it.


Motivation

Motivation is not something that you're born with or something that you just "have". It is a state of mind that is maintained by an environment that allows for it. For example, if I go home and spend an hour playing video games straight away, the chances of me even being motivated to do anything even remotely positive for my life is drastically reduced.

On the contrary, if I spend an hour in the gym or running, I am very likely to continue on my "streak" and read up on one of my development books, or create some software. Motivation is a fickle science, but we can take some steps to get the most out of ourselves:

  • Stop procrastinating. If you know you are procrastinating, you need something to break your cycle of ego-protection. Like going here or here. You need a slap in the ego, basically.
  • Develop good habits. Good habits beget good habits. If I'm on Facebook all day, I'm just not going to be bothered to work on an assignment. Start the day lazy and you will end it lazy.
  • Take pride in your work. Have you ever wondered what it's like to be THE go-to person when it comes to getting things done? That'll be you if you take your work seriously enough.
  • Work out! No matter who you are, a good jog will put you in a great mood. It's science, don't argue with me. You can lift weights too, but this will not have as great an effect on you.
  • Clean your physical environment. In other words, your workspace. You can't work in a pigsty, nor can you work with distractions. Music/audiobooks are fine, but avoid games, etc.
  • Practice a good diet. It sounds silly, but as mentioned before, a good habit will inspire other good habits. Personally, I can't remember the last time I drank a soft drink.
  • Accept failure. You are going to fail. Maybe not today or tomorrow, but you will fail at some point. You need to be mentally prepared to deal with it, before you can begin fixing it.

Schedules are great. Use them, but do not stress out at all if you miss something you've scheduled. GENERALLY try to stick to it. This means you wake up thinking "I want to do XYZ today", but do not stress out if you can't find the time for them,

It's easy to think that you're missing out on life when you think of all the time you could be spending on your favourite hobbies, but instead are stuck here eating apples while jogging and accepting failure simultaneously because Marc Laffan told you to. However, continue reading to the following section and I promise that I can give you at least a few reasons why this is a good thing.

"Working" In Your Time Off


Firstly, studying outside of work? Doesn't that sound crazy? Like you have to dedicate all of your free time to even MORE work? 

Yes, yes and no.

In order to become reeeeeeeeeeeeeeeeally really good at software development, you'll need to be some kind of savant or at least do SOME study outside of work. I know this sounds like a life sentence, where you're annoyed to have spent X years in education, then be told that you have to work even harder now, but it is the truth. In order to become that good, we have to have our own personal projects, keep up to date with technologies, start blogs (Shill!) and keep on developing your skills.

It may sound like a life sentence, but it really doesn't have to be. Firstly, I'd like to remind you of when you first started feeling a sense of pride in some kind of work you did. Maybe it was some industry-level software you developed, maybe it was a really good History essay you wrote in school, it really doesn't matter. If you had spent the time you used to create those awesome things on watching TV, playing video games or browsing Facebook, they would not have been created. That sense of work satisfaction would never have crossed your mind and you would have accomplished one less thing in this world.

It is true that the  ultimate goal in life is having the freedom to do whatever the heck you want to do at any time. However, we people are pre-disposed to wasting our time on doing things that we enjoy in the short-term, but that are of absolutely no benefit to our overall standard of living. If we did get to go on Facebook all day, we would spiral into a deep depression. The same would happen if we watched TV, went on the Internet to watch funny videos or played games all day. We get little more than a jolt of endorphins from games, or sense of esteem when we see that we're doing better than someone else on Facebook before we realise that we've wasted an entire day on something that has not been productive in any way.

This really isn't an ideal way to spend life. If anything, we should be bettering ourselves by reading classical literature, spending time with our families, painting pictures and socialising. Or letting our imaginations run wild, by creating a beautiful garden and holding a party in it with our neighbors. You could visit another country and sketch out a few buildings!

My point here is that, aside from socialising and going to other countries, we waste a lot of time on hobbies that, while initially enjoyable, are not good habits to entertain yourself with every day for hours. In the end, we almost never benefit from video games or TV. I say "almost", because with friends, they can be quite sociable and fun! Our time would be spent much better elsewhere, chasing our lifelong dreams and minimizing time-sink hobbies that are not beneficial to us.

One method of having good habits feed into each other is a reward system. I, like many people, have a set of things that I want to do in life. I want to read Shakespeare, read up on Greek and Roman gods, practice the harmonica, become an AMAZING developer, find that perfect job, do a masters in computing, finish reading my Java For Dummies book, get big muscles (don't laugh) and travel the world.

I would classify these goals into two areas; Goals I can do now, and goals I can do later.

Goals I can do now, include working out, reading up on Java, practicing the harmonica, reading up on gods and reading Shakespeare. Travelling the world is more of a life-long goal.

So how does one do all of this, when it is so tempting to practice a little harmonica then waste a few hours on Facebook? I'll never make any real progress like that. Instead, I'll allow each goal to "feed" into another. In other words, I will study some Java, then "reward" myself with a harmonica lesson. It is an easy way to reward oneself with further work satisfaction. Reward hard work with more hard work and you'll sleep well knowing you've done a good days work.

If you read the previous section, and are living life with an apple in each hand, beating up your failures with eat bite, I highly doubt that it will be long before you want to train in your free time, regardless of what I have said in this section. It is a natural progression to move from living life the "right" way, to training in your spare time. After all, it can't possibly do you any harm to attempt to further your skillset.

Where To Go For Training?

So after all that, where does one start with training? The internet is a gigantic resource that can provide you with everything you could possibly need, but only if you know where to look. Youtube does has some good tutorials, but it generally is not as good as simply taking an online course.

Online courses can be found on:

Udemy
Team Treehouse
Coursera
Codecademy
Parleys

There's also a few places on Reddit that can support those new to development, or in search of more difficult brain teasers:
/r/learnprogramming
/r/programming/
/r/programmingchallenges/
/r/dailyprogrammer/

And of course, some comedy...
/r/ProgrammerHumor/

Keeping up to date with technology does not have to be particulatly exhausting. Once you have a list of blogs to track, it can be very easy to keep on top of trends in Software Development. For example, I know that Guillaume LaForge, Graeme Rocher and Peter Ledbrook are major contributors to Groovy on Grails. So I keep an eye on their blogs (linked to the text) to see what's new with Groovy on Grails. Try this out on the software you specialise in and you should find it easy to keep "in the know".

There are also several magazines you can use to keep on top of technologies. I buy Web Designer, for example, and a recent copy had an introduction to Ruby on Rails. I did my final year project in Rails, so it was nice to be able to check out whether there were any changes in the framework since that project.

There is also the Soft Skills book my John Z. Sonmez that I think every developer should read.

Soft Skills: The software developer's life manual contains tonnes of advice on how to live as a software developer and is a book that I live by (Which I think was the intended effect). I don't mean to sound like I'm trying to sell this guys book for him, but the reviews speak for themselves. It basically shows you how to live your life as best as possible, how to negotiate pay, how to train yourself and has helped me quite a bit since I started reading it. 

How to study?

How one studies and trains is very important. The more effort you put in, generally, the more you will learn. However, there is one thing you absolutely should know about software development when it comes to studying it above all else; It is not the same as studying for other subjects.

You cannot read books and expect to know al of the material. It is not like other subjects, where you can simply read the books continuously and expect to know the material entirely. You NEED to perform the practical training in addition to reading the material. You will NOT retain everything form a book. The best way to study is with an IDE (Or whatever development environment you use) open in front of you. Books can be used for reference or as a starting point for your studying, but they absolutely should not replace practical training. If you don't have an IDE open, you are not studying effectively.

Lastly Evernote is a priceless piece of software that provides you with a means of digitising your notes in a very manageable way. I recommend this software as a place to store college notes, personal notes or anything you need for your studies really. Once you've spent a few weeks putting notes into it, you'll know what I'm talking about!

So that's pretty much it for now. If you've actually read all of this, then I applaud you for your time and patience! There's no time like the present to get started on bettering ones life or career, so what are you waiting for? Go eat an apple!

No comments:

Post a Comment