Becoming a junior rails developer
So I looked for a tech cofounder and infact found almost three. Then a friend who was a developer said they would be happy to “play” and see what comes of it, if we paired (pair programming) as it would be fun, and if he was going to use his non-work time he wanted it to be fun. I agreed this was a better approach, building alone is hard (Thanks Phil)
A bit of context
My father was a computer engineer i.e. he fixed mainframes for Digital, DEC and than Apple II upwards. My first computer i.e. my dads was Sinclair ZX81 it had 1k of memory and used a tape cassette for storage. I learnt BASIC. My second computer (this time mine!) was a BBC Micro 32k of RAM. My first serious application was again written in a different form of BASIC and allowed you to paint and draw. My childhood was very unstable and I went to a number of foster homes and many schools (I was little too curious). Anyways eventually I got to college (16 yrs old) and did a (BTEC) Diploma in Computer Science.
It felt too easy for me and I was more curious about humans so dropped the course (even though I was one of the top performers) and took a bunch of A Levels in Psychology, Sociology, Communications and Human Biology. At this point I learnt , I was a really bad at written english (it took several years before I found out I was dyslexic). I dropped the courses and went to Northern Ireland for a year or so. I came back and tried again in one year intensive courses. Someone close to me died and I screwed up my exams.
I got enough to get into the Higher National Diploma for Computer Science at the University of Hertfordshire, UK. In the first year I was in the top 10% of my class and got moved up to a Degree program and graduated in 1996. And than than did not code again until 2013.
Becoming a coder, again..
[update] in hindsight these courses gave me confidence, but did not relate to the reality of what it is like to be a developer in a full-time job.
I wanted to learn Ruby and Rails, all along because I want to build prototypes for my startup (Professional You). Yet there were no local courses. I prefer learning with others, its good to have a peer group. So in Jan 2013, I booked myself on RailsConf 2013 and gave myself a deadline to read and complete Learn Web Development with Rails prior to the conference. I was introduced to a start-up (Thanks Jessie) and started working with them two days a week as a junior rails dev. I learned a couple things about myself, I was not good at asking questions from the lead software developer as I was worried about taking them away from their tasks (as they were under a lot of pressure from their boss) and we worked remotely, which is not ideal for a junior. I also found testing before coding was very difficult, in part because thought I needed to know rails better first. Additional good Rails book that helped in my journey were Rails 4 in action Rails Anti patterns, Peepcodes Videos on RSpec and rails casts. railscast are brilliant for an immediate problem to solve but is very out of date, Code School as a selection of rails videos as does GoRails. That said I do not find that anything I learn online or via video sticks, I seem to forget it quickly..
If I was to do it again:
- Learn Web Development with Rails there is just no better
- Build several Web Apps for yourself e.g. store all your boardgames/books, role up characters for RPG, whatever feeds into your hobbies and use rails casts to add features
- Read Rails Anti patterns
It becomes clear that Rails does so much and its BIG, but the better your Ruby knowledge, the easier working with Rails, no shit. There are times you have to build your own model without Active Record and connect to APIs. Everything becomes a little easier, your code gets tighter.
I tried the Well Grounded Rubyist book, whilst I understood all the concepts it was too much without having not built Ruby Apps first. Most of the online Ruby course were interesting such as Code Academy, but they failed to stick in my head, one exception was a course on Lynda called Ruby Essentials, which frankly was brilliant (Teaches the basics and the gets you to apply them in a Ruby App). After that I tried the Ruby Koans. The hard part about coding is trying to remember it all, understanding I think is easy but holding it all in your head is hard. One senior developer said to me you do not need to remember everything just remember you can, then Google it. The more times you use it the easier it will be to remember. His other tip was to store all of his projects on Google Drive, so he could use it has augmented memory.
Training that actual gets you to build an application, I found to be more useful and gave me extra value, rather then little bits of code. Looking at how other developers tackle the same problem is also incredibly useful. Peepcode did a bunch of Play by Play videos, which taught me a lot about how they solved the problem and I also learnt how to use different tools.
The other thing you should do is work out how to connect to your local community:
- Ruby Rogues podcast is awesome and their discussion site is worth the $10 per year
- Find the local Ruby meetup group
- Find a peer/mentor who will review your non work code
If I was to start again:
- The best beginner book for Ruby was The Book of Ruby: A Hands-On Guide for the Adventurous
- Add RubyTapas videocasts
- Then follow up with the Well Grounded Rubyist book
- Read Metaprogramming Ruby 2
Learning about software engineering/development..
There are a bunch of tools and “behaviours” (ways of working) that you have to learn, some of this comes from you just coding, but some you need to spend a bit of time working on i.e. Git (or other version control)
- BASH – Re-learning Unix i.e. Terminal on the Mac, SSH
- Text Editors – Trying out different text editors, BBEDIT, RubyMine, Sublime and finally Atom
- Version Control – Getting comfortable with version handling i.e Git, how to use GitHub, decided to use command line to embed it in my head
- Package Management – so home-brew is better than Mac Ports
- Debugging – Where to find the bugs for debugging, using irb, rails console, understanding the logs and the stack trace
- Object Orientation learn and understand all the meta language. I have yet to find a good book on this.
- Data Structures – I am comfortable with, but I have yet to find a good learning option for this
- Algorithms – The best option I found was Grokking Algorithms
- Where to find the information that will help i.e. online manual, google, stack overflow, google groups
- How to tackle the actual problem, when to step away and take a moment
- Where to ask a senior and not annoy them (still working on this one)
You are never ready, its just a matter of choosing the time, finding the courage to be vulnerable and going for it.
Its seems surprising that some of the best times in my life are when its has gone so wrong, you really discover the other people around you in that moment the good and bad. You could wait to be that perfection and never make a move. I knew that two days a week of coding after working the other five was tiring me out, but I also knew I liked to code, I love problem solving. That said I had yet to build my GitHub profile, most of my work was private, most of my student work was very specific, so not a complete web application but do this on this page. Whatever, It was time to go full-time. Lets see what happens..
The best way to get what you want is to simply ask
Just before christmas 2013, I sent out an email to the Ruby meetup group in Vancouver, BC. The discussion space often has recruiters looking for rails developers, why not flip this and advertise me! I did not expect much of a response..
Subject: Looking for a Junior Ruby on Rails job
I hope you are having a great day and not too bored..
I have computer science degree and most of an MBA. I have played and succeeded in many other careers like communications and being a politician. And I have learnt that I love to create. So I went back to school (BCIT) to refresh my computer skills and learn web applications, after two years I have done a bunch of evening courses with an average grade of 93%. For the last 6 months I have being learning/coding Rails/Ruby on my weekends for a local startup. I have also attended a bunch of Rails/Ruby conferences in the US on my own dime.
Full-time I have being working for Apple as a Genius/IST Support. I know crazy right working 7 days a week for two years.. I am now looking for a full-time software development role with an emphasis on Rails.
You will find all the good stuff in my linkedin profile -> ca.linkedin.com/in/ericbrooke/
Continue having a great day 🙂
In all I got 80 responses, over a four week period (40 within 48 hours). There were 42 real jobs going, 20 were long term contract, 8 short term contract. 10 were you are the first developer, no not good, go employ a intermediate or senior developer! Leaving me with just 17 companies to talk to, after researching each of the companies, I spoke/emailed to them and then did 14 actual interviews. After which I cut it down to five after second interviews I cut it down to two..
Finding the right team to join..
You are the apprentice and you are looking for master/mentor/teacher/coach/facilitor not a boss, not the brilliant programmer whose ego is big enough for you both.
A couple principles for me:
- Those that asked for me to do code test prior to having a first human to human conversation, I did not continue.. I am not your code bitch.. or your slave, talk to the human in me first
- How much they truly bothered to explain who they are as a company and their intended culture, mattered to me.
- You need patient senior developers who are willing to coach and that their bosses will give them the time/leeway to coach
- That you will learn a lot from developers who have different styles and roots, prefer different languages and frameworks
- I need to grow and learn fast, how are you going to help me get to intermediate?
- Seniors that have being teachers or parents tend to be better at explanation. Just a theory at the moment.
I want to work with awesome people.
Be they smart, emotional intelligent, creative or just different. The most laughter at work I have had are with teams of such diversity, with so many forms of intelligence, not just the academic kind. I am going to be spend a lot of time together, consider it a road trip, we will get angry, sad and laugh together. The culture, the people that I work with is important to us all. For these people I will have lasting loyalty, forgive and move on, push the boundaries to ensure there is a future and learn every fricking thing I need to learn, take time out of the rest of my life to make my colleagues life easier. So if you send me a coding test before, we know, we like each you can frankly go @@@@ yourself.
A good interview is a collaboration of us exploring each other.
[updated] Questions to ask –
- Have you ever had any juniors before?
- How do you review code?
- What is your test Coverage? What are you not testing?
- Do you have Introspectives? What do you do to help developers learn?
- Do you use pull requests?How do you use them?
- Do you state why the code is wrong in the pull requests?
- How will help me growth fast, so I am no longer a junior?
- Is there flexibility on which projects/teams I work?
Understanding your capability is hard and is often judged on so many irrelevant things
There are few jobs where you are ask prove you can actually do the job before you actually do it. Some tech interviews felt like you were expected to put out on the first date.
The best I had were conversations and tested practical experience, not theoretical mathematics. The actually best asked we to describe what I know and then sat me down at a computer asked me my favourite coding tool loaded up an example application. They asked where would I find a routes file, explain these routes, where do they take me, asked me to follow the whole path what was load etc. After if I want to add this to the app what would you do? “feel free you access the internet”, explain what you are thinking? The sneaking bastards even had a couple “bad” things in the code to see if I would notice. So I did not mention them until I was about to leave 😉 That was my first job offer
The worst started with theoretic problems to write pseudo code on the board… Funnily enough they started questioning my pseudo code. Some people see an interview as a way to prove their intellect not understand yours.. Have you forget who is interviewing here, you, er no both of us.
For people who did their computer science degree a long time ago or learnt on your own path; I recommend this book Think like a Programmer by V. Anton Spraul. The most stupid, abstract, non-relevant questions I have every being asked in any interview were all in technical interviews. And folks I was an elected politician.
Testing the “interviewers”
I have learnt more from people, when I have failed or needed help.
So every job interview I find something to fail at and see how the interviewer copes. I will also ask my interviewers how they will cope with my failure and how they cope with theirs. I will always ask at the end of the interview what do you like and not like about me. I learn so much from their response.
The type of organization to work for..
If I am going to work on something, I need to care..
Go for an one domain company, startup or for an agency style..
Domain companies tend to give you a position and you have to earn your right to grow, the structure tends to be more rigid, yep be a junior for three years. You get small parts of a big cog. But you would learn about scale to a higher degree. And maybe they may have systems/coaching/mentors/learning plans in place to accelerate growth of juniors. That would make sense would it not?! not one on my list.
Startup, happy to take the risk but you have to love it and I did not love any of the startup offers. Also they tend to lack the numbers of senior developers you can learn from.
I went agency i.e. build prototypes, because I wanted to work on a lot of different products in different domains, I felt I would learn more faster, and so far that is true comparing my growth to my friends. With prototypes you have to do the beginning a lot and then you finish, and then you do it again, there is opportunities to grow in each project.
The job I took
It felt like a conversation between curious people.
It started on the phone, progressed to face 2 face and then there was a take-home coding test. They were good questions that I had to think about. The whole process felt open, unstressful, they trusted me and I trusted them.
I asked my boss what does he look for?
“People with a wide life experience who can clearly show they can learn”
So far it is pretty awesome I get to work with three seniors who have different approaches and the diversity is already teaching me a lot.
So after two and half months I got laid off. They removed the Junior developer position (it affected two positions), and I was the least experienced, through out the company). Two weeks later 11 more people got laid off, then another bunch a couple weeks later.
It was also reminder whilst you can test the people you get to work with. But their bosses can(may have to) change their mind (and in fairness it may be outside of their control). So in future I will look at the leadership and their track records.
I would still make the same choices, and worked there. I learned an incredible amount and worked on 4 projects.
All of that said, I ended up in another startup mybesthelper where my first job was to get our tests over 85% and upgrade their Web App to Rails 4.1, fun 🙂