Friday, February 5, 2016

Why you should learn to code but not become a developer

I sell several copies of my book everyday that promises you can learn to code and land a Rails job.  That is still true.  What I am saying with the title of this blog, is this:  

It is soo much easier to learn how to code and land a QA or Test Automation position, than it is to start out as a full blown developer.  Being able to solve basic coding algorithms on Free Code Camp is not the same as being a developer.  NOTE:  Free Code Camp is great, this is not about them.


At my first job, I wore many hats, did some email management of the support Queue, did some testing, some front end work but it wasn't a full blown developer only position.  At my second job I did test automation which basically meant I was using Ruby to keep track of performance metrics and wrote several different scripts that solved/tested various things.  I think the longest script I personally wrote was 387 lines of code.  


There is nothing wrong with what I did, I mean my code worked, it solved the problem and the company still uses it to this day everytime a certain build is triggered.  Honestly, the script was me 'hacking' trying to figure out how to solve the issue, which I did.  The script wasn't written in OOP, ( Object Oriented Programming ), it was just me functionally writing code to solve the issue.  It could have been written in probably 100 lines of code if it was written in OOP.


I am not very good at OOP.  I don't instinctively think in that manner, I am learning more about OOP, I need to improve the way I write code.  I love learning and love programming, so this is a 'good problem' to have :-)

So back to my point, you can learn to code and land a full blown Rails job.  What I am seeing in my coaching and from the emails I receive is that most humans who have zero coding backgrounds will not be comfortable doing this.  You may be able to land the job, but you will be struggling all the time.  I love that I get to use Ruby at my day job to write automation, every day I get to improve my coding abilities.

I think learning to code can be broken down like this:

Learn the basics of coding:

If, else statements
Loops
variables
data structures:  Arrays, Strings.

Knowing the above you can do a lot.  You can solve most problems that you will face in test automation at an entry level.  This is what I did at my first job, I knew Arrays and Strings well and could always solve an issue by looping over it enough times and throwing in some control statements.  You can solve 80% of problems with the above which I think is a really positive and encouraging thing for beginners new to code.  NOTE: Yes, I knew more than the above, yes I passed tutorials on Classes and OOP concepts, but I didn't actually ever use them in real life.

Learn more of the language:

Hashes
Recursion
Different types of loops
Ternary operators
Case statements
Code indentation
Cleaner code, not being redundant with code.


The second job I started to use this more, this is when I started to use things like 'Robo-cop' and 'Ruby linters' to help me learn more about how to write code better.



OOP

This is where I am now.  I know of OOP but typically if I have something that I need to solve I will do it functionally.  This is the year I am trying to get away from that and really embrace OOP.

 I need to better understand and use:

Classes  ( most basic algorithm challenges don't involve using classes and can be solved by writing a few simple methods )
Modules
Inheritance
Clean Code ( I am currently reading the book, and am trying to implement it in real life )
Deeper knowledge of the Ruby language, trying out and playing with new methods just to learn more about Ruby.

In order to be good at Rails ( I'm not ) you need to be good at OOP and not simply be hacking things together until they work :-)

The above is why I also switched to Ruby Mine IDE instead of Sublime Text 3 for many reasons.



This is why I suggest to learn to code and then get a job that involves coding but not at a level like being a full-blown developer.  I think you will make your life easier and not become frustrated with coding but instead, will still find it fun, and will enjoy the journey of learning more and more every day.

I plan on writing a post on how to easily solve the first 30+ of Free Code Camp algorithm challenges ( people have been emailing me asking ).  It's actually quite simple and not too hard.  Which brings me to my point, solving algorithm challenges exclusively will not make you a good developer.  I think OOP is where things get harder, learning to think in OOP, is a different skill set in itself.

I don't think you should sit in your basement for 5 years until you are amazing at OOP and then try to get a job.  No, I think you should get an entry level job in QA that involves 50% of the time writing code.  Then you will get to grow and learn all the while being paid!

Keep coding peeps, you can do this!