Is ageism a lazy form of decision making?

Ageism is often used in reference to what some people think about older people. I have seen ageism used to undermine the opinions and thoughts of younger people.

I think what I have learned is that perception of someones age has some strong prejudice and assumptions that come with it. That these undermine people when they need not. That by treating someone with more or less respect due to their age can often blind you.

together we are stronger

Friends

My friend circle varies massively in age range with my oldest friend being 35 years older then me and my youngest 23 years younger.  Interestingly I find younger people more prejudice than older for  relationships. Personally I like a good mix of friends who we can have fun, conversation and trust.  Having friends from very different backgrounds, helps me to have greater perspective of the actual world.

Dating

Dating sites encourage age discrimination, with Tinder/POF/okCupid (not eHarmony) having it as priority information. Age seems an easy category to filter on, but like looks it’s not a good predictor of chemistry or how you feel with someone. What little I know of relationships is you need to be a partners (that control and guidance should be shared by both), grow together and respect each other. Also I have found that some people are more concerned how others think i.e. he looks too old for her or vice versa than anything inside the actual relationship. We are sometimes concerned with one taking advantage of the other.  The question really is what is equal? No doubt a journey travelled together is more powerful and sharing the different perspectives of your different experiences is more powerful.

Being younger in work

My experience in my twenties was there was a lot of assumption by older people about what I did and did not know.  I found myself looking older to be heard.  I had a goatee for a long time to and dressed to look older, it made a huge difference in the reception of my thoughts.  I also found that adults/leaders/managers would not include the why when they were doing something and just tell us what and sometimes how. I felt like a child and I did not like it, in fact it made me more rebellious. And in part I gave up sharing my best ideas. The best leaders who would explain the why would get best of me.

Life Stage

Our Life Stage can sometimes be mistaken for ageism, for example couples tend to hang with couples, couples with kids hang with couples with kids.  Whilst this is not always true, there is something in it.  One potential employer asked me because you have a child will you be able to truly commit to this job. I just left the interview, and I don’t have a child!

Being Older in work

Now as an older person occasionally I have been asked if I have too much responsibility or have the energy to really commit to a job i.e. stay late on a regualry basis.  The energy one is something I have seen both to me and others (if you know me you know I have more energy then the average 16 year old).  In fact it has increased the older I get (hangovers however last longer then they should)! Medical science is also improving the quality of our lives, which is good because most of us will not be able to afford to actually retire. One employer asked me because I was older would I be able to keep up with the younger employers?  I asked him what he actually meant, he said are you hungry enough to work long hours?  It felt like he liked to take advantage of people.  I have always worked long hours.  Six months ago I worked for two years seven days a week.. My age had nothing to do with it.

It’s assumed that if you’ve made it to a certain level, you must be over a certain age and have advanced credentials (Eg. A master’s degree). Assumption makes an arse out of me and you.

Startup and Techs

When I go to startup pitches I find the Angels (Investors) tend to favour young men. There is a combination of sexism and ageism going on here.  And there is a mythology that all successful startups are built by young people, which is not supported by any science but appears to be the “view”. This article digs into this.

Mark Zuckerberg apparently said that people under 30 are smarter.  Another article explored The Brutal Ageism of Tech. One practice of hiding jobs behind Recent Graduates is explored here.  There appears to be a view that people over 50 should not be in leadership jobs.

Rising above ageism

I want to be better than my past experience, I want to evolve not enforce a stupid prejudice. So here are my suggestions to myself:

Never ask someone their age

Do not judge someone by their age.  It is lazy, get to know them first. Attitude may be effected by your age but is not dictated by it. Just because you started with same (or opposite) political view as your parents does not mean you keep them.  Its experiences not age that will determine what they become.

Talk to all like an adult

Take the time to explain why, treat all like equals and invest in a person. Treat others as you wish to be treated.

Ideas should be valued regardless of age

A great idea can come from experience but also from lack of experience. Understanding the idea is more important than making assumptions of what I perceive it to be or who delivers it. Ideas are always fragile, so grow it see where it takes you before dismissing it.

Actual experiences is more important than age

Wisdom I feel comes from experience more the bad ones than the good ones. Own your experiences, they maybe apply to others. That said, experiences can also limit us, sometimes you need to prove there is more to explore.

Age does not relate to capability

There are now more ways to learn, than ever before.  And its not just knowledge, There is more shared wisdom in the world. Take this article on reaching 40 and what you realize. Just look at TED.COM or the number of self help books. Money does not always determine access to knowledge. And teaching has become better so we can all learn faster. In fact I would say that two things can show this how well read a person or how many “good” videos (ted.com) or video subscriptions a person follows e.g. RubyTapas. All of that said getting fit right is often more important than current capability.

Age does effect health but not energy or drive

That said, it can be severally muted with a good diet and exercise.  When I was younger I took my health for granted.  As I got older I appreciated my body more, learned more and in some ways I am fitter now than at any other time of my life.

What thoughts or experiences do you have?

Growing beyond a junior software developer

I think junior, intermediate titles belittle people and their capabilities/talents/skills.  Where as sometimes the senior title can over in-flate your capabilities, whilst belittling others. We as humans love our labels as it allows us to understand what we are talking about or get the context faster. They also limit/focus our understanding and can make us lazy, in fully understanding a humans’ capabilities. Particularly if they have multiple capabilities. And lets face it, software engineering has many different capabilities, approaches, etc.

Working with others

Its not just about you anymore and you learning code, of course that will always be a big part of it. Its what you do with that knowledge, how you share it, how you take on advice, how you help others grow and of course building something that people want to use. Your perspective changes.

Its not just about you anymore, its about the people you work with and where you are heading

It changes in that you no longer look at a problem the same way, its not just the feature and what code you will need but how will this feature affects other features, the dependancies map out for you.  Your ability to problem solve becomes more complex, faster..

I have broken this down into the four aspects of what I have seen.

  1. Being a better human and using code for good
  2. Growing technical competence
  3. Understanding the big picture
  4. Building something useful

Being a better human and using code for good

As we get better at understanding what we are doing, in theory we should also become better at communicating it with our peers, as in other developers but also to non-developers.  I feel there is intrinsic value in sharing the growth journey.  In all fields, the master will have much to learn from the apprentice (I’ve learned so much from my students, interns and co-ops).  The best way to refine your skill is to teach, even when you are at a high level.

Explanation of the simple things

It seems you will spend more time explaining to “Business Types” the need to

  • Reduce technical debt e.g. not build on a house of cards, the risk higher to not tackle this problem..
  • The need to refactor e.g. imagine saying what you think, before filtering, do you always send the angry email or do you edit it?
  • Why tests are important e.g. so I know when something is broken before a paying customer or that key investor?

Having good analogies will really help.  Match these analogies to the interests of the person you are talking to.  The more analogies you have, the easier winning the “debates” will be.  Your other duty here is the is to balance yourself – does it really need to be that secure, that fast, or that perfect? Compromise is often needed between humans and their different interests i.e. technology and business. Remember no revenue or growth, no money, no wages..

Taking time to review all pull requests

Before I would let the “Seniors” weigh in on the pull requests.  Well I am now the most experienced in Rails in my current team, kind of scary, there are no seniors.  I have to figure it all out as it comes. This drives me to learn more, both tactical and strategic learning (explained below). Also when I do not know or understand I get the developer to explain the what and why, until I do. Interestingly this process is kind of like interactive rubber ducking (where you explain the problem out loud) and sometimes we have discovered problems together or I have learned something new :-)

Spotting trends – the continuos code review

Helping people change behaviours and habits. This is easier if you can help people see specific code and have a good solution.  Always explain the ‘Why’. Habits take time to change, be patient. If you are, they may copy your behaviour and be patient with you. Kindness breeds kindness and critic breeds more criticism, where do you want to work? Of course there is a balance our job is often rational, but us humans are not.. Yes you may like to pretend but you are not Spock or a Sociopath..

preference => { :hamster 'true' } <<- Would this work with {:hamster 'true'}? 
vs {:hamster => 'true'}

preference: { hamster: :true } >> preference: { hamster: true } (unless symbol 
explicitly desired, would object true be more desirable?)

Thanks for the example Zachary Moshansky

Sharing rather then deciding

As a leader (software dev was not my first career) I have often stepped back to let others explore, gain confidence and grow their Leadership skills.  I find myself doing this more as a software developer. Yes I have ‘an answer’ but I will introduce it only if needed.  I no longer need to prove myself.  Let others try before giving the answer, pushing your brain a little, helps a person test and experiment (core to be a good developer).

Creating a culture through own actions

I laugh a lot, generally at myself. “cultural leaders” help change an environment through their actions more than their job titles.  Cultural leaders are not always those with “given” authority i.e. through a job title or description, but earn it through how the teams thinks and feels about them. Reward behaviour you want to see repeated. But be careful that a person does not overdo it. Balance is important, turning someone into a workaholic will be detrimental in the medium and long term to them and you, when it goes pear shaped..

External Peers

Talking and exploring code with others I always find powerful, particular if its a dialogue and ego is removed. A conversation where two people share.  There often times I seek out the opinions of my peers either through taking a developer out for lunch from another company or use a site where opinion is allowed e.g. RubyRogues.

Interviews

I have talked about this in previous posts, just to say think about how you would get the best code out of you in a technical interview.  My favourite technique so far is to pair code with empathy. To ask questions that relate to your real work. Also to realize the vast majority of humans do not perform at their best in an interview, so how can you help them bring a glimpse of it out..

Growing technical competence

Skills

In the end you are measured by your skills and delivery.  There are three skill sets you need to grow as a developer

Technical Skills

  • Language skills e.g. C, Ruby
  • Testing e.g. RSpec
  • Framework e.g. Rails
  • Tools e.g. text editor, FTP
  • DevOps e.g. AWS, New Relic, Google Analytics, Capistrano, Ansible

Brain Skills

  • Ability to learn – what are your learning styles?, how do you remember?
  • Problem Solving – how do you keep sharpening this?
  • Concentration – what is your best environment? best time of the day?
  • Abstracting – what helps e.g. whiteboard or something else

Communication Skills

  • Explanation of complex things – analogies, stories
  • Negotiation
  • Team player
  • Leadership
  • Conflict Resolution
  • Feedback – giving and taking

There is also something else very important and that is fit.  I would personally would rather work with someone I enjoy working with (and maybe less skilled) rather then a misfit who is brilliant. The impact on team morale i.e. happiness, dramatically affects productivity. Often teams interview for one of their own (a misused version of fit), this can be missed opportunity to grow the team to the next level.  Avoid clones. Get to know people, I would suggest before you know their code, sometimes you will meet people that you will want later in your journey..

Keeping up – Tactical and strategic learning

I thought I had to do homework before, but its seems that now the homework is at a more abstract level. Code styles, refactors styles, and now I am not focused on just what need, but on what the team is all working on.  Day-to-day you have learn/research how to solve the bug or create a feature – I called this tactical learning.  Then there is the bigger picture e.g. the application of object orientation, MVC or other patterns.  This I call strategic learning, some of this you will have done in a Computer Science degree, but may have to learn how to actually apply in your current language and/or framework. Of course if you did not do a CS Degree, you need to make times to learn this.

Tactical Learning

Google the problem/feature, stack overflow, google groups, podcasts that come with forums e.g. RubyRogues has Ruby Rogues Parley which allows you to ask for opinion which at times is more helpful then QA websites like stack overflow

Strategic Learning

Books that talk about patterns, anti-patterns and architecture, how you organize your code help you take the next step up. Patterns are useful vocabulary, but do not get blinders, everything in moderation.  Examples in my journey included Rails Antipatterns: Best Practice Ruby on Rails Refactoring and Design Patterns in Ruby

Places to look Goodreads.com for Books, or Coursera for free theory courses.

Growing your perspectives

Yes I would love to be an expert in Rails and Ruby.  As you become comfortable it is time to explore another perspective for me that will be going deep with JavaScript and Angluar.JS. Each language you will learn often make you better at all the languages you know, they will give a greater context for understanding programming, they will give you greater flexibility in roles, problem and challenges you can take on. As we know every language will evolve or die, just the same as everything human.  To ensure your future, play and experiment with new languages, stay curious friend.

Technical growth

I find adding in some different sources of knowledge and wisdom that are not also related to by immediate work help, so I subscribe to Ruby Tapas, RailsCasts, DestroyAllSoftware and http://rubyweekly.com.  I like video because I feel like I have to read so much, that it gives a bit of a break and occasionally I will listen to RubyRogues podcast.  As you can see I use different senses, and formats to make my learning easier.  I also love books, yes the ones made from paper, you can see my collection here https://www.goodreads.com/ericbrooke.  I also have become very interested in how people teach the same concepts, firstly so I can see what helps me to consume knowledge faster and then because I want to help others grow. All of that said experimentation seems to be the most effective for me to learn and for me to retain what I have learned. When trying out a new Gem I will often create a new Rails App and add the gem and play..

Isolation

I used to try to change too much in one go. Now I will (mostly) change one thing and check before moving ahead.

A touch of obsession

Sometimes it feels like we have to become obsessive about that new skill for a while, to get to know it well, see where it breaks and then dial back.

Introspectives

Each week we have a meeting to look back at our code and talk about some of difficulties we encountered and how we solved it. Each developer gets sometime and I also pull together a number of videos talking about some code/language/architecture thing to share. This is a developer only meeting, no founders/product managers our purpose is to learn from each other.

Notetaking

On this job I worked on a Rails upgrade from from 3.2 to 4.1.  with over 100 gems in it, I took the opportunity to take out all the non-supported gems, there was name-spacing changes in some, frankly there were incredible number of moving parts.  It was taking notes that saved me more than once.  I also documented errors and how I solved them i.e. copied the error and the solution, it was interesting to go back after the process and evaluated my solutions.

Concentration

How do you get to the zone and stay there.  When during the day are you good at the tough problems i.e. for me its the morning and about 3.30pm I could nap or grab a coffee. What breaks you out of the zone? What music on your headphones takes you to another place where you can write efficient readable code.

Problem Solving

The way you think is valuable.  Not all of us tackle problems in the same way.  As software people we lean into a very scientific approach of experiment and see the results.  That said sometimes its is a smell, that we cannot put on finger on the whole details, unless we have seen it before, our intuition may led the first step. Understanding how you break down problems will help you.

A great talk at Railsconf by @geeksam that would apply to all problem solving can be found here http://www.confreaks.com/videos/3391-railsconf-cognitive-shortcuts-models-visualizations-metaphors-and-other-lies

Understanding the big picture

Its not just about you, or even your team, the department or just the company..

Working with business

The code is never perfect, but we can see many ways we want to improve it, sometimes it will be a speed gain, other times easier to understand, making on boarding of new developers easier or faster feature builds as you have a better foundation.  That said, if there is no one to pay the bills and your wages.  As most things in life we are building on something imperfect, yet we need that feature to attract users who will pay for the use of the application.

Architecture growth, getting the big picture

We can often it driven by ‘Feature completion cycle’, or importance of velocity. This can lead to less reflection, less understanding of the business, less thought on the big picture or of the monster we are creating. It is a common trend for startups to build several generations of Apps, as the initial core App was mutated to do many ugly things to add that feature that you needed.

eBay gives 20% of the development time for the devs to work out what they need to do i.e. no features.  This is put into refactoring, experimentation, etc. They learned from having to rebuild the entire App several times.

Good Architecture also allows for a faster on boarding, and the confidence to not always employ very experienced coders and build a healthy ecology of experience levels in your team.

Understanding the moving parts

Whilst I am not suggesting that you know everything, do get to know the important things  from product, marketing, UI/UX/Design, sales. Respect the other cogs in the organization, will help you grow your overall business understanding, maybe even grow your friendship circle, or even find a great co-founder for that startup you want to get going..

How we behave around here

Organization culture, the stories, the myths, the symbols, how leaders and followers treat you, does the organization trust you or does it enforce it? When you get wrong, how does the organization/people forgive you and when you get it right how does the organization/people celebrate?

Understanding of Technology

This is an unfinished thought, which I will come back to.  There are some technology organizations where the CTO or the VP of engineering are the only people that really understand technology.  If they are unable to advocate effectively for the coders in the organization, they appear to become feature shops, driven like factories, where the coders are mere cog works to manipulate, where the pressure is always on and there is no time for reflection and learning.

Building something useful

As a software writer of whatever type, you generally want to build something that is useful.  Something that people want to use.  Whilst some founders/product people would like you to only build what they have determined as useful, I would suggest you are not just a software writer, you have opinions, thoughts and so do the users.  Sometimes it pays off to have raw data and form your own filters/patterns.

Knowing your users

In the end its really all about your users. Knowing your users will help, and not just your impression of what you think they are like. Get to know your market and its people.

Analytics

Have analytics systems embedded in your applications, watching behaviour from a scientific perspective is very helpful. It is only part of the equation but a measurable form.  The chances are you will not always measure everything you need in the future, so make the integration easy and expandable. Also note the actual server processing cost of whatever packages you use. All of that said analytics can be dangerous, mis-used and soul destroying, they should be part of the equation not the whole!

Draw a line in the sand about which are vanity metrics, and which are actually meaningful

Brooklyn Zelenka

Product Manager/startup founder

Be honest with them and upfront . Do not wait until it is beyond the deadline to tell them that it will be another week.  They may be talking to investors or senior leaders and promise dates.  Keep people up-to-date.

Community

Paying attention to community managers needs are important they will often see “mob” or “crowd” behaviour and form impressions.  These are invaluable, take time to have coffee/lunch with a community manager every month.  Community Managers may seem trends forming before they pop up on your analytic dashboard, if indeed they ever do.

 

 

Hacking Health – Gaining a suntan in Whitehorse, Yukon whilst coding

I headed to Whitehorse, Yukon, Canada to spend the weekend at a HackingHealth weekend. It was an amazing weekend because of the people, the event was interesting but the people I travelled with,  those who I met from the Yukon and the health professionals who shared their lives were awesome.  This will not be the last time I spend time in the Yukon :-)

Most of the event was tracked pretty well on twitter #hhnorth14

Yukon

Finding developers

Alex Greenhill asked if I would be interested and if I could get 6 other developers, the event would cover the hotel and flights.  I advertised on all my social media and the ruby meetup group, django meetup group, Node.JS meetup group. Meetup.com only allows you send messages on 3 separate groups per day, new learning. On a side note it was interesting to see how each meetup group had their pages setup, some had admin needed to forward email, some had a group email and some had a separate discussion groups, with threads.

Anyways during the course of a day I had 40 people respond and another 20 over the weekend. First come, first served, and only those with full web stack and/or Android/IOS skills.

Early ideas

There was a Sparkboard platform which was a great introduction to ideas (Built by Matt Huebert in Node.JS).  Here is this events collection.

Vancouver Team is set

 Friday – Meeting the team

Vancouver HackingHealth Team

We were a real mix of personalities and backgrounds. Amazing bunch of people.

The Yukon hospitality really was evident from the beginning, we were picked up from the airport shown and around and dropped off at the Hotel. It was hot here, I needed my shorts and suntan lotion!

The Venue – Kwanlin Dun Cultural Centre

It was an awesome venue, big place, big kitchen and you step outside and it was so peaceful.

Kwanlin Dun Cultural Centre

The teams and ideas

All the ideas were given 60 seconds to pitch their idea. And then everyone talked to people, to discover which team to work with.

I had some great conversations with doctors, nurses, social workers and other technologists. I learned so much about Health in Canada but also about health in the Yukon.  And it did not stop there I learned a lot from a social worker there about the local issues, culture and their specific problems.

Brooklyn and I noticed that health discovery was mentioned in a number of projects, so we felt that if we abstracted this problems we could in theory support all three of those projects.  We decided from the gecko our purpose, we wanted to build something that help others build out their software quicker.  Hopefully allowing participants at Hacking Health to build something greater.

Food
So a lot of the food was made in the next door kitchen by volunteers.  It was a good variety of health food and there was often vegetables and fruit available through out the day. Some of the food was made by the Alpine Bakery, yum, yum..

Whitehorse, I like it..

You know I love small towns, where people will look you in the eye and smile. When conversations are easy to start and continue. I suppose its the county in me, people that just enjoys people, and when we don’t we loose ourselves in nature.

Like seriously where else would you be invited to paragliding for day, join a family for dinner, go to a wedding, asked you want to go fishing, bought a couple rounds for drinks, get a bunch of invites to cabins to drink, where you would get a free guide to show you around — at Whitehorse, Yukon, Canada

Saturday – Day of coding and interviews

A lot of the day was spent coding, with breaks to interview different health professionals as they came in, about the health care system and the Yukon.

Interviews – Physician , Nurse, Patients and social workers

Turnover is higher in remote areas, as people come for their “Northern Experience” and return. The work is very varied and you have less choice to specialize or not to do, work you do not like. The work can be “brutal” and its likely most of your work will be related to alcohol or drug addiction.  Everyone knows everyone so people notice if you go to a sexual clinic. People are not aware of what programs are available and awareness of new people takes times.  Most doctors are self employed and are paid for “fee for service” i.e. paid for appointments, that doctors are not paid for preventive care, thus they reword the appointments to get the patient what they need.  The Canada Health Act responded to doctors not taking enough appointments, but has created a situation where preventive is not valued and that doctors do not get paid for going to community meetings.  Building trust takes time with remote communities, turnover hurts more than in the cities.  People are often confused which service they should access.  A number of people stated they were often confused by language used by Doctors and what was on the websites.  It was mentioned a bunch of times it was not clear what services could actually offer.

Learning about life in the Yukon
Most business is done by phone not by email. Here there is no phone signal between towns. Most have blackberries if they have phones at all. WIFI is uncommon. There is no Rogers/Fido up here. There are a lot of cabins, with no power, or running water. Most cabins need wood stove to survive the winter.

Helicopter trip

During the day there was a fair with a helicopter ride.  It was a lot of fun.

Sunday – building the pitch

Health Geo was our pitch.  Saturday Brooklyn and I coded a lot. Sunday was split with me building a pitch and Brooklyn finishing off the basic funcationality.  By the end we had a working project which would allow you put in locations add information for each of those locations e.g. abilities, symptoms.  It took us longer then we suspected it would.  But we both know a lot more about location services now!  It was not pretty but with just a team of two it worked.

https://github.com/ericbrooke/healthgeo

There eight pitches left out of thirty ideas.  We each got three minutes of pitch and two minutes of Q & A.

Judges

Astronaut talk
David Saint-Jacques (@Astro_DavidS) spoke of his journey to almost become an astronaut and training he went through. I really enjoyed it and he came over with confidence and humality.  He later came out for food and drinks. A good guy.

Astronaut talk

Awards

Awards were given out to six of the eight pitches. You can see their spark board summaries here.

With a double award (Popular vote and Health Tech consultation award) going to voicemail for the homeless, using Twilio as their base technology – ReachMe led by Leigh Ayton, social worker .

  • “Yukon Baby” for winning the Design Consultation award, led by Chris Nayor MD
  • “COPD Action Plan” for winning the Bonnie Walker commercialization & consultation award, led by Bethan Davies, health professional
  • “RelievR” for winning the Outside the Cube consultation award, led by Jonah Marek MD
  • “3D-printed finger splint” for winning the Technology Services award led by Sam Fleming

Dinner and Drinks

After the work it was time for some fun. We got a space at the Klondike Rib & Salmon Barbecue, the food was great and the waitresses were sassy, one even took a sip of my drink to make sure it was ok :-) After we headed to join the organizers, volunteers and an astronaut to drink further.

Bison

 

Heading out of town we went to Andrew and Alyissa’s cabin for drinks and a campfire.  It never seems to get completely dark here. Thanks to Sam for driving us out and Jayden on the way back

IMG_0067_2

The Whitehorse team and community

I feel incredible grateful to had the opportunity to be a part of this. This event felt like no other Startup Weekend/Hackathon I had ever being to. It was clear people had put a lot on hold to get this event up and stay running. There were many stories of things falling through yet Ben Sanders and the team, kept it on track.  Ben, Andrew, Alyissia, Aarti, Shreya, Tina, Sam and all the others behind the scenes – Thank you :-) I wish had worked less and got to know the rest of the volunteers more.

Developer Retreats

I think Whitehorse would be a great place, where people come up for a couple months, working on their own a software project, maybe they could get a reduction on rent and food for working on local community projects. 

Hacking health volunteers and organizers

Suggestions for Hacking Health:

The event was fantastic, here are some ideas to build on the great work you are already doing.

  1. There should be a pre briefing about the local health/social issues.  This could be a Youtube video or it could be the first session where all can get involved. Either way this should be pre pitch.
  2. Judging panel should have one developer on it, this is a combination of technology and health after all.
  3. Create a list of all ideas at HackingHealth events and a list of all pitches given.  Sometimes ideas help others develop better ideas.  Also people with similar interests may find each other and starting building together outside of the actual events.
  4. It would also be great to have a quick reference guide to all the privacy limitations specific to the Province / Nation as Hacking Health is international  (Seth)
  5. Health like Education has the great potential to build lego blocks that other teams in the future could use. Encourage people to share and build for future hackathons. Most projects are too big to build alone. As developers we are often abstracting the problem, as we see common problems in different places, we are not limited by departments or silos, we look for the common problems and then common solutions. Most of the code used in one hackathon could help other hackatons build more, or even just copy and thus build complete solutions.  Encourage this behaviour and bigger things will happen.
  6. Jesshan and Matt you should tell your story on the About section of Hacking Health.

Monday – Getting out of Whitehorse and into the Yukon

Some of us stayed to enjoy more.  We took a short trip out of town to see mountains, desert and grizzlies. Thanks to Corin for the tour and Chris for driving..

Grizzilies

Carcross Desert

Feelings

Some places touch the heart, this is my attempt to describe it.

Whitehorse, Yukon

A moment in time, stillness

The sun down beat and I could hear the water

A bird called out and there was only the wind in trees

The view reminds you, of smallness of you

 

I turned around and there the humans be

Friendly, sassy and unafraid

They will look you in the eye and walk into your life

You walk into a bar and sit and you do not have to be alone long

 

Its not all pretty, you have to think ahead else nature will take you

There are few of the those fancy things that make you lazy

You trust in your people, your truck and dog

but that cellphone no work much

 

Whilst there is much light, the future is uncertain

There are many opinions of the road ahead

They agree, that there mountain be grey

But whether civilization should come on down, there are differences

 

This is a place to be close to nature, with light feet

A place to get shit done, to take a moment and reflect on the past and ahead

A place of good people, the practical, escapists and survivors

A place closer to the heart and a drink or few

 

railsconf 2014

Chicago

Overall I enjoyed this conference more than last year. I am now 15 months along my journey into Rails/Ruby.  I considered whether my enjoyment was because I understand a lot more rails and ruby, of course that is a part but not the only part, the people, the sessions and Chicago all made a contribution.

There were many amazing talks, good workshops and I met a lot of people.  I thought all of the keynotes added value to my thought process.  My favourite talks were from Sandi Metz, Sam livingston-Gray and Adam Cuppy.

I am adding all the resources I find to the bottom of this post, including photos I took of the job board.

You can find the keynotes here http://www.justin.tv/confreaks/videos and here is an amazing set of photos from railsconf https://www.flickr.com/photos/justingordon/sets/72157644405839722/

Be warned I will keep updating this page! Agile page production ;-)

Prequel – The day before

Getting to Chicago I flew in from Vancouver, BC.

Guide and scholar

Last year I was a scholar so I was given the opportunity to attend for free RailsConf 2013 because I was a student and a newbie to rails.  This year I wanted to help a scholar and be a guide.  This started the night before the conference starts where you are matched with your Scholar and you get to know each other.

After we headed to Howells and Hood, couple blocks away it had over 100 beers on tap.  Jeff (from enova, they are hiring) also bought us a couple rounds of drink and introduced us to enova the company he works for in Chicago.  The drink and debates were passionate, we talked about each others path to Rails, where juniors can get jobs, the things you should learn at the beginning of your career, tech interviews and who was employing juniors.

Day One – Tuesday

Breakfast, apparently the most important meal of the day. We found Yolks a good breakfast place which was located just a couple blocks away.  It had a great menu.  I ended up eating breakfast with a couple randoms and a team from (NextGear Capital).  I was impressed in the diversity of this tech team and they are on a hiring spree.

Yolks, Chicago

DHH keynote

I enjoyed the talk, he was passionate, direct and funny. I am also a believer in free and open speech, though there are topics that challenge this belief such as hateful on sexist/racist/homophophic. This talk was none of this but it did challenge the “common way of thinking”. I wonder if he opened too many fronts at the same time?

“The TDD experiment has failed, it just makes us all feel guilty, but tests are important but they do not have to come first”

I have to say I am happy when I see tests! They are not as common as we would like to think.  It makes it easier to understand, refactor and onboard new people. But DHH really was talking about the need to do it first and when done so could lead us down some architectural choices that are maybe to helpful for the overall plan. His analogy of guilt and diets in describing TDD was very good.

“We are software writers and only occasionally software engineers”

I like the analogy of being part software writer, it makes me consider more seriously the need to refactor your code.  When I write emails, I often get the main points together and then keep editing and deleting.  This comment made me reflect on not thinking of them as two separate “things”.  As someone at the beginning of their software career this was a helpful analogy as at this time I have written a lot more English than Ruby.

I also wonder if it makes access for women easier?  I read a good study – Breadth-Based Models of Women’s Underrepresentation in STEM Fields – An Integrative Commentary on Schmidt (2011) and Nye et al. (2012).

Relative strength of math and verbal abilities and interests drive science, technology, engineering, and math (STEM) career choices more than absolute math ability alone. Having one dominant aptitude (e.g., for mathematics) increases the likelihood of a strong self-concept in that domain and decreases the likelihood of equivocation about career choices in comparison with individuals with equivalent mathematical aptitude who have comparable strength in non-math areas. Males are more likely than females to have an asymmetrical cognitive profile of higher aptitude in math relative to verbal domains. Together, these two points suggest that the academic and career pursuits of high math ability males may be attributable to their narrower options among STEM fields, whereas females’ more symmetrical cognitive profile means their math and verbal interests compete in the formation of their ability self-concept and, hence, in their broader career choices.

My take away is we are in a competition, with other careers to encourage women to join us in software development.  If we are open to new ways to think about ourselves, this may or may not help.  Just a thought..

I wonder if this (the wider use of titles) is a good way to introduce different types of software builders into our community?  After all with all these bootcamps, new types of people will join our ecology, what will they have to teach us and how do we support them?

I think we need different type of software builders on the team and having at least one computer engineer/scientist is an essential  foundation. I should declare my undergrad was Computer Science. In my experience with teams, diversity is generally a good thing. Some of the best developers I have met do not have a background in Comp Sci degree, but instead have a Music degree. I also find teams with a mix in sex and culture are able to solve the bigger problems faster.

The better the readability/eloquence of our codebase will make on-boarding far easier for junior and senior alike. And if there are tests too, on-boarding becomes even easier!  We need the artists and the scientists. After all the ruby/rails community will have to include a lot more people to have a healthly ecology.

Simplifying Code: Monster to Elegant in N<5 steps by Tute Costa (@tutec)

This was a good workshop and started really well, working through five of the refactor patters.  I pair coded with my scholar. This was fun to help her understand more fully each of the steps. And in teaching you learn better ways to explain abstract concepts..

 http://www.slideshare.net/tutec/simplifying-code-monster-to-elegant-in-n-5-steps

Lunch

The hotel is right on the river/canal it was good to get some fresh air. I learned that Chicago dyes its water in the canals to get the green colour.

Ruby Coding Dojo by Carlos Souza and David Rogers

Here I stole a hour of this workshop (workshops covered the time of several sessions) before I headed for the next session which I wanted to see. The thesis was that practice was essential for software builders, just like it is for sports people and musicians.  That they spend more time practicing then actually doing.  They use the Dojo as a way to practice their code. Not too different from Ruby Koans idea, but they showed it as pair programming.  I like it :-)

Concerns, Decorators, Presenters, Service Objects, Helpers, Help Me Decide! by Justin Gordon (@railsonmaui)

I think he needed more time for this talk, this would have been a good workshop.  He gave a scenario and then a solution.  This was very helpful.  His notes are comprehensive and he has included all of his slides with a repro and a branch for each example.

https://github.com/justin808/fat-code-refactoring-techniques

Mutation Testing with Mutant by Erik Michaels-Ober (@sferik)

A good and clear talk. About the use of Mutant Gem which tests your tests

https://github.com/mbj/mutant

Keynote – Farrah Bostic

This was a funny talk about some of things we may have forgotten after a couple years as a developer. She believes that a customer-centric approach is essential to designing innovative products and services. I am paraphrasing some of her thoughts:

Professional obey the laws and amateurs break them

Be nice to one another, take the time to explain to other non-developers. Stay inclusive welcome people to your community. Do not become like the Java or PHP community.

Are we approaching a code inequality, where it is good for you to be a senior and me a novice? Is it a goal for me to keep you in a position as a novice

Structure inequality is a bad thing for our society. Inequality creates fear.

Technology is in a magical place.  But are we talking about good magic or the dark arts? Or people who will be tolerate of us muggles and be nice to us and not scare the hell out of us and this “evil” technology. The question I have for you is whose side are you on? The Dark or the Light?

Your opportunity is to become customer centric coders.

Keep the good intentions and match with good behaviour, this is what attracted me to the rails/ruby community

No empty read me docs

If community/team matters to you will be surprised by this talk http://www.justin.tv/confreaks/b/522183251

Dinner discussions

As often happens a random group of hungry people got together at the end of the day to eat. Our group was a mix of sex, companies and levels.  A number of the scholars(novices) asked why are there no junior roles advertised.  Comments included:

  • One senior asserted that he felt other seniors were scared of loosing their “prize” position of being able to claim high wages and move jobs easily if they wanted to.
  • Another felt Seniors are lazy and do not want to take on extra “human” work load, of coaching a junior.

It started a passionate debate which was good to hear. We talked about GitHub and is it sexist?  We of course we talked about DHHs talk.

Day two – Wednesday

Yolks 2

Yehuda Katz keynote

Why we abstract and reduce complexity

  • We are not unique, we want the same things, we tackle the same problems
  • Software development is not a science
  • Laws are not good things
  • We build on abstractions and makes us better
  • Shared solution, we build progresss
  • It’s all about managing complexity
  • These tools allow you avoid complexity
  • Start at level 23 rather then 6
  • Area of experimentation (new levels) are where the debates are had and then it will become part of shared solution
  • The higher stack the less complex work
  • Rails has succeeded in building our stack out, it has reduced the complexity, it allows us to concentrate on the business

Deploying Rails is easier than it looks by Ben Dixon (@TalkingQuickly)

This was a good introduction to deployment of a Rails stack to a VPS.  Ben has a book Reliably Deploying Rails Applications

His stack was:

  • NGinx – web server
  • Unicorn – app server – zero time downtime
  • PostgreSQL – database
  • monit – monitoring – its tiny
  • chef solo + knife(Server Provisioning)
  • capistrano 3(Deployment Automation) rake app

Reading Code Good by Saron Yitbarek (@saronyitbarek)

Form a reading club to regularly read ruby code.  Her presentation had great visuals and also a way to spend up your learning of Ruby.  Whilst her talk was aimed at novices and juniors.  “Book Clubs” are a very good way to explore management/leadership and frankly any topic.

Panel Discussion: The Future of Rails Jobs by Obie Fernandez and Panel

A couple statements from the panel:

  • Employees are more interested in the team, and product over money
  • If you are junior apply to any level of post, smart people match on personality and the ability to learn
  • Average pay for intermediate 80,000 to 90,000 US
  • Fear of too many bad skill levels due to boot camps

Tricks that Rails didn’t tell you about by Carlos Antonio da Silva

I did not go but heard good things

https://speakerdeck.com/carlosantoniodasilva/tricks-that-rails-didnt-tell-you-about-at-railsconf-2014

How to be a Better Junior Developer by Katherine Wu (@kwugirl)

This had some interesting perspectives about the approach you should take with the rest of the team. How to use your skills as a non developer to support the developer team.  But stay on target to become a developer.

Panel: Teaching the Next Great Developers by Noel Rappin

This looked at different perspectives of how we are currently educating the next generation of rails/ruby developers i.e. bootcamps.  It covered the lack of developers.

If supply does not meet demand, demand will go elsewhere.

This comment stuck me with and a couple stories were told about funded Startups unable to recruit rails developers choosing different stacks to build their “stuff”.  I have encountered this personally as Rails developers are too hard to find, a few companies have asked me would I consider learning Node.js.  I will have to explore this further. Jeff Casimir @j3 had some great comments:

If someone asks you to code on a whiteboard, ask them how to do I run tests?

If your company does not spend time bringing in junior/apprentice devs they are going to lose.

After there was much conversation of the Bootcamp phenomenon.  A good number of the Scholars for this years conference had come from Bootcamps some with lengths of 2 months others 3 months.  There were a good number of strong opinions of this phenomenon, I share a few of these here:

  • Some feel that bootcamps are producing a “novice” level of software developers, not yet junior
  • That some feel that these bootcamps reduce the quality of the rails community
  • That the bootcamps with a certain apprenticeship of least 3 months are the best
  • That some exaggerate their “employment” opportunities/success and it should be measured if the boot camper is still in their job 3, 6 and 12 months later.
  • That some bootcamps are filling up all the “junior” spots in companies leaving non-bootcamps juniors grasping for straws.
  • Some companies are cycling through 3 month apprenticeships
  • Some felt they could reduce the pay offings as they “flood” the market.
  • That the quality of bootcampers is very mixed
  • That bootcamps are bringing more women to our ecology
  • That with the standard tech interview most bootcampers fail due to lack of understanding of Algorithms, Data structures and use of Ruby.
  • That we build frameworks, to handle complexity, Rails should bring people in who should not need to be a computer scientist.
  • That they exist because the education institutes do not teach Rails/Rails, leaving the only option to learn with others being bootcamps.  With startups and business driving the demand for rails as a fast prototype framework.
  • Some felt it was a good thing and whilst painful for the community, we will evolve/adapt and it will help the community step up in numbers and mature.

Evening

Chicago Diner – Great vegan food.  No I am not a vegan, but this was the best meal I had this week. You should go!  Then we hunted down an Ice cream shop, Margies felt like going back to 1921, BIG helpings

Margies

Evening discussions

We talked about our journeys to rails this was interesting most had come from a different background i.e. not computer science. From the people I met at the conference about 50% were actually from a Comp Sci background (A good chuck had also dropped out).  Most told me one of the strongest reasons they choose Rails/Ruby was the community and how helpful they were.  The journey seemed to be Rails and then fall in love with Ruby.  We also talked about our worst tech interviews, wow I thought I had some interesting experiences.

Day Three – Thursday

Comedy in software – Baratunde Thurston (@baratunde)

Without a doubt the most humorous keynote and the message was do not make boring software, find ways to be unique and humorous with it. Use your error messages in a fun way. If you need a bunch of good laughs you should watch this keynote

Cultivatedwit.com

All the Little Things by Sandi Metz (@sandimetz)

Without a doubt the best talk at the conference.  Essentially she took a long IF/ELSE monster and converted it from procedure to real object oriented code.

  • Small methods are good
  • Refactor large if statements into case with methods
  • Tolerate duplication until you find the right abstraction
  • Squit test – look for bends and see types are near each other
  • Are you going to write procedures or trust objects?
  • Inheritance is good when it is, shallow and narrow and for leaf nodes
  • case is for business logic, not choosing classes.

https://speakerdeck.com/skmetz/all-the-little-things-railsconf

I need to read Sandi Metzs’ book she is also currently writing a Rails book, here is the keep me informed email page.

Pair programming with my scholar

She had a blog setup but could not get her CSS to work and was confused about the different stylesheets what they met and when to use them. And what are all these extra extensions are e.g. erg and scss. And she wanted to get bootstrap up and running. We covered

  • Assert pipeline
  • File name extensions
  • What is sass and setup up some variables for her colours
  • Quotes the difference between ‘ and “
  • Bootstrap
  • First bootstrap button

Let the drinking begin

Happy hour in the exhibit hall, this was good but lacking due to no seating.  Which just encouraged us to go to Code climate drinks :-)

Caipirinha

Day Four – friday

Taming Chaotic Specs: RSpec Design Patterns by Adam Cuppy (@codingzeal)

Frank this was an awesome workshop.  I learned a couple really good things from it.  A really backed room.

  • Pattern 1: start from minimal valid object (test to true)
  • Pattern 2: control values with ‘let()’
  • Pattern 3: Permutations using ‘context’
  • Pattern 4: Descriptive naming
  • Pattern 5: Extracting common behaviours

Pattern five was a real eye opener :-)

https://github.com/CodingZeal/skinny

Tales from the Crypt by Aaron Bedra, Justin Collins, and Matt Konda (@abedra @mkonda @presidentbeef)

This was sketch where the team walked through a bunch of security issues. I think I have to watch this one again on the video and take notes this time.

Cognitive Shortcuts: Models, Visualizations, Metaphors, and Other Lies by Sam Livingston-Gray(@geeksam)

http://www.cs.colorado.edu/~ralex/papers/PDF/OOPSLA06antiobjects.pdf

This was a beautiful talk.

Key note – Aaron Patterson (@tenderlove)

A homourous round off by Aaron, with some balance to DHHs’ talk. You need to watch both DHHs’ tale and Aarons’ to fully enjoy. His thrust was in part that we need science in our community. Concluding with his 3 years of work on Adequate Record essentially speeding up, by 3 times certain ActiveRecord queries. His last act was him merging/pushing his amazing work.

Conference Reflections

The conference was well run and organized. There was some great speakers, great debate and lots of awesome people. Thank you smile

  1. First day novice track- There should have a newbies/novices track i.e. next steps for boot campers on the first day.  Maybe with the 10 things from computer science you need to know, or how to use Active Record, or The 10 differences between a junior developer and intermediate, how to survive tech interviews.
  2. Get the community informed earlier – Maybe next year the rails conf team could state that they are interested in building a couple tracks and ask what “we” think should be in the track. Lets move the conference from waterfall to customer centric Agile ;-)
  3. Find out what we(the community) needs – Have a way to vote on topics, and then advertise them and take offers.  I think that either the way the rails conf team should get to decide, rather than a popularity vote, but new ways of engaging people in what topics and what workshops, I think would produce some interesting results.
  4. Level Tags – Hacking rails was delivered as a junior session.  Maybe it would be worth considering adding tags to each session stating the levels that will be covered. The Novices track without a doubt had greater percentage of woman in it.
  5. Keeping our community “good” – Maybe we should have a community track next year, if this is one of assets how can we keep it, evolve it and stay welcoming.
  6. Humour – It was really smart to have the humorous keynote on day three today, it gave me energy.  I am also going to build a resume, to help me find people I want to work with based on their humour.
  7. Food – The food, it was well, meh, with the exception of the last day. For snacks please consider nuts and fruit, less of the sugar crash afters.
  8. Space – Some of the smaller rooms, felt very packed and lacking of air.
  9. Jobs – A bigger jobs board and maybe one for people looking for jobs.

T – Shirts Competition

For those who have not being to railsconf, most of the companies in the exhibit hall stands have free t-shirts to give away.  They always run out of XL so there is a rush (unlike the gold rush). These are the T-shirts I would wear after railsconf.  I like them because the material is soft on my skin and the logo/text/pattern is interesting to non-developers and developers alike.  Those just with their company name are a FAIL.  I don’t mind advertising your company if it is comfortable and smart. New Relic = Datalution, Rackspace = Keep calm and code on, Sales Force = Achieve and of course railsconf :-)

IMG_1628

A weekend in Chicago

I stayed in a hostel (The Chicago Getaway Hostel), great place has a lot of events.  The first night I went on the pub crawl and met three other railsconf attendees who I had not met before. The next day I slept and coded and then onto another pub crawl and met still more railsconf attendees :-) Had a great Chicago pizza at Chicago Pizza and Oven Grinder Co

Chicago Pizza

Other resources for Railsconf 2014

The job market

The ruby job market

The job board

rails2014 - job board 1railsconf2014 - jobboard 2railsocnf2014 - jobboard 3

Surviving as a Junior software developer

If it helps, you are never ready, you will never know enough, and the key is knowing how to cope with that.

At the beginning you may have no idea or a vague sense how to solve the problem, you will look at the feature and Google it. You will write code and may even get it working and over time, hours or days it may get ripped apart and rebuilt. Sometimes you will part of the conversation, other times you will come back to find its all changed.

In my first months/projecClimb to intermediatets/jobs I had some amazing moments as I solved problems and got the feature marked off the list, or I discovered that lttle thing that was stopping it working.  I also has some tough moments, where my code was changed without
any comment, or ripped apart in front of me, sometimes without comment or another time with the senior developer responding to my questions with condescending responses.

You will need to separate your self worth i.e. ego from your code. You will need to manage that nagging sense you are not good enough.

Coding is hard, you need to know so many things, that are constantly changing and if you are full stack that could be CSS/SASS/COMPASS, HTML, Javascript/JQuery/CoffeeScript, Rails, Ruby, SQL, GIT, BASH and that is before we talk about APIs and deployment!

Here are some of thoughts and learnings I gained from my first couple roles as a junior software developer:

Read the error message!

The most frustrating thing for your colleagues is when you ask a question and your testing suite or your log  is already telling you everything you need to know.  Have you read the errors and if not understood them have you googled it? Yes actually copy the entire error message and paste it in the search bar and press return. Do you know where all the logs are?  No, hunt them down. It is also true that some error messages really are not helpful, infact they appear to lie, just look through the stack trace..  I record the really abstract ones, in my computer notebook with the solutions.

Code Reviews & Pull Requests

If these are not happening, ask for them, if they are denied look for the next job.  They are fastest way to grow as a developer, whether you be a junior, intermediate or senior you will learn a lot by others reviewing you code. And you will learn a lot from watching others get and give feedback. Yes some people are dicks when giving feedback, maybe you should give them feedback on their feedback (you might even help out their friends and lovers! being able to give feedback is crucial for all human relationships). Innovation and learning comes out of exposing your code and being vulnerable to feedback.

The best Pull Request comments, point out the issue and then explain why it is wrong (you may need to train your seniors to put the why, telling the why, is difference between being treated as a child or an adult). Do not become a parrot and copy and paste, understand why it is wrong, you will learn and grow faster.  I also have the habit of reviewing my pull requests on a weekly/bi-weekly basis to see what errors, if any, I am repeating, to target in my next afterwork homework.

Code reviews when someone senior or intermediate reviews a bunch of your code are incredibly helpful, in seeing what you are good at and what you need to improve.  If you are alone build up a peer group, who can review each others code. Either way you should consider reflecting on your own code every month or so, at the beginning of your journey you learn so much so fast, that you maybe able to refactor your own code.

The next extension for this, is to put your code open source and then allow the world to help you improve your code..

Pair Programming

There is even a better way to learn, yes pair coding it is like having a sports coach who is giving you constant feedback, and you get better.  This is awesome from a learning perspective. Not only will you learn about the code but you will see how your colleague use their tools as well, which will may give you some productivity tips (or vice versa).  Also you are likely to cut problem solving down by 50% in terms of time. This is not just a technique for juniors of course (its great for on boarding and teaching your organization code style).  All of that said this scared the hell out of me when I started, I thought I can not remember all the syntax and options.. Until I saw that most seniors/intermediates would without a thought Google the function or command to see what their options are. I learnt that is not important to remember everything, but to remember that you can.. Now I am less scared.

Build out your augmented memory

Whilst watching most seniors, they would often lookup old projects to see how they had done something in the past. Whether it would be a Google Drive, Drop Box or even GitHub they would keep most of their old work.  Another trick I saw was the use of notes for each task or type of task e.g. on Mac they would have a Note (or Evernote) on RSpec and have all the matchers and examples, or all of the startup scripts for spinning up a new node, etc. The point to be clear is you will not remember everything, so have it somewhere useful for you, in fact your memory just becomes the index of what is possible and where you did it last.

Also for the tasks that you need for setting up your computer, the environment and creation of an App, I store all of these on Github, to help me not forget a step, and also to keep my personalized setup (colours, BASH paths etc) somewhere, here is mine. You never know when you computer will die, or need to be erased, or you just get laid off!

Separating self worth from your code

Receiving feedback from colleagues can be tough. Some think code is very rational, logical and lacking of emotion.  Thus the feedback can be equally logic.  And some developers can be very cold how they deliver it.  I even had a couple experiences when “seniors” ganged up to give me feedback, and frankly it was pretty painful to receive.  When I asked why and tried to understand I got cut off and then “shussed”.  I walked away from the situation and then learned not to ask a question to a couple developers at the same time. That said if someone is a dick to you, you do not have to return it. Be the adult, because today they could not be.. I have also had some awesome experiences when my colleagues talked through issues with my pull request, explained the why and what good practice options there are. You want as much feedback as you can get.

So you will need to toughen up a bit, process and work through their comments, and when you do not understand either research it, until you do, or ask.

Asking when you need help

There is a balance between asking too few questions and too many.  On one hand you may take too long to solve a problem and build that feature –  on the other hand you may well “piss off” (make grumpy) those senior to you.  This is tough, my general rule is to ask if you cannot figure it out after 40 minutes.

In my first job I think I did not ask enough, I know I would have grown faster if I had.  That said when you are interrupting someone who is in the zone, it feels, well, difficult. Also when they are in zone they often look grumpy, constipated or are frowning and generally look unapproachable.  You will learn the clues on their face over time on when to ask.  Of course my personal view is when my colleagues ask me for help, I will always help.  I have this crazy notion that collaboration is fun, yes even face to face!

Growing your knowledge base

Sorry but you are going to have to do homework! Most non-developers have no clue how much you have to learn and then how fast it is outdated.  My solution for this was to do between two and three hours every night, then maybe a longer stretch on one weekend day.  But there is always one day completely off.  When you are hungry its hard to forget that you are actually running a marathon and not a sprint.

As with all learning, you will have strengths in some learning styles.  As a developer you will have to pimp all the styles.  I try to mix and improve all my styles. Really understand what learning style best works for you.  Do you prefer to build and hack together, do you prefer to read/process, do you enjoy watching videos, do you prefer to learn with others.  What makes that new thing stick in your head? Understand this as you have a LOT to learn and process.

Personally I like a mix, I use books (yes they are made of paper), videos (they are so many approaches that you should try a couple companies to see what works for you), and I have a couple people who I learn with.

A good book on this topic is Make It Stick

This is a marathon not a sprint

That thing called work life balance at the beginning of your career is frankly bollox (bullshit for non brits).  That said you should make time to rest and not think about code.  Reflection will allow you to actually learn the big stuff or that thing you could not connect at first, to spring understanding on you (Bong).  The unconscious mind is a very powerful learning machine, it needs sleep/dreaming, a different context and maybe something creative, like music, painting to be fully powered up.  Yes and exercise, dammit, it also helps. And if you are NOT single, consider those that will love you a lot longer then your job or career even, yes that includes you dog (or cat), plan that time. And if you are single, you are more likely to die or suffer a nasty disease, so make time to meet someone and live longer..

Watching other developers code

If you watch someone who has many years, you will not only learn their style in coding, how they write, refactor, and maybe even test. You will also learn how they use their tools and this can just make you a lot faster. Peepcode did some fun play by play videos that allows you to see some of the experts code.

Reflection – Knowing your code and improving it

Every week I look back at my some of my code and research similar problems to see if I could refactor it.  I sometimes look for web applications that solved the same problem and see how they approached the same problem and I consider the why, benefits and drawbacks.  I go through my refactor book and look at my code and question it.  I find the creation process can be different to an editing process, it sometimes seems a lot easier.

Working on one thing at a time

I found early on I would try to solve the whole feature in one go rather then breaking the problem down into is component parts.  Now I divide the feature into a number of tasks and complete the tasks one by one (I even add them to Pivot Tracker or write them down on a pad of paper!).  This allows my brain to be wholly focused on the problem at hand, rather then holding the whole code in my brain. I find I chew through tasks faster, consider out of the box solutions more often as I have that spare RAM to consider them.  I also find if I draw it out, I consider the connections and external parts to a greater level.

Commit often

For every feature I now create a branch. After each task is done I push, well sometimes pull push depending on the time scale. First you will get mini morale boost, secondly you have a backup, third others can see what you are working on. AND fourth, if you need to rollback it is better to do it if you have many hooks to choose from.

Asking Why?

Children do it far more and they learn faster.. And if that other person cannot explain, go and work where they really understand and love to explain..

Relationships are important

There is a direct connection to strength of your relationships and the opportunities that will come your way. Invest in the people around you. Do the right thing by people, even when it all goes wrong.  Those people are far much more likely to recommend you for your next job.

Features and front end

Completing a feature will gain you kudos, and adding something that clearly effects the customer experience will gain you support from those that support customers and help the sales team.  Having allies in all camps will help you be more resilient (keep your job) in a downsizing and will likely help with endorsements and recommendations. CEOs tend to protect developers who produce more the observable changes i.e. new button, skin, more responsive, etc.  Where as the CTO will tend to protect those who write good code and write good tests.

Have Plan B, C and maybe a D

You are the bottom of the pile, when layoffs come, you are the first in line.  Protect yourself have a Plan B as this is very likely if you are working at a real startup.  Go to meet-ups, get to know your local community, make connections with developers, so if you do get laid off, you have people you can reach out to, so you can find your next opportunity.  Having an active blog of what you are learning helps you reflect (so learn better) and you will build a following over time.  Also work on some projects that you can put out there, so they are public on GitHub, if you feel comfortable to work on open source do.

Should I be a developer?

You may ask yourself this sometimes. I certainly asked myself this at times, when you may watch others craft so easily. This is often referred to as the impostor complex, check out this railsconf talk. https://speakerdeck.com/nmeans/you-are-not-an-impostor. Then I find myself, looking for an expression for fun, I find myself impatient at not knowing, well everything, I dream about exploring other code.  Over time I found myself reading the source code rather then a blog piece explaining it, I started to understand more and more code, I find that I want to go back and refactor that hash search removing the [:id] and put in a fetch(), because it fails loudly. I spend breakfasts with other developers exploring what we know, what we have forgotten.. oh it appears I have the bug, no not the bad one but the one you are bitten by… I notice it has being several days since I got stuck and had to ask for help and instead I am asking for opinions.  Do I know everything no, can I find a solution, yes :-)

If you are not from a Computer Science Background

You may lack in understanding of Algorithms, Data structures and do not have one computer language down i.e. Ruby, Python, Java, or a C variant, yet.  You may want to create a growth plan for yourself to introduce these.  Over a year work out the things you want to be good at, there are some good free course on https://www.coursera.org. It really depends on how deep into the stack you need/want to go.  If you are out of a Bootcamp, consider building your understanding in the primary language (e.g. Ruby, Python) and data structures first. Consider than basic Algorithms, just the basic concepts, not the math and then play with a functional language e.g. Erlang or Haskell.  Learning a function language will force to think in a very different way, but do this after you are comfortable with a primary language.

Side Projects

Every senior who I have spoken to says that they learned an incredible amount from creating something they were curious about, maybe on a new framework or connecting to an API. Some would just explore how one GEM/package/library worked.  This can also be helpful for building out your GitHub profile.  That said when you are doing some much other homework this can be hard.

Choosing the right company

Medium/large company There are some who think that a junior is better off, going to a medium/large company.  This approach essentially states that these companies will have the processes to mentor/coach, a bigger team to take on juniors.  That said juniors have told me that there options are often limited to be first a “customer success”, or QA, or part of a front-end team and they have to work for a couple years before being promoted to a full stack team.  You will be able learn over a period of time but may be limited to less important tasks.

Agency/Code Shop Another approach would be to work for a company that will give you access to many codebases ( like an agency or a code shop), thus you will learn very different things, different styles of coding and architecture choices.  This may lead to building lots of Apps but only to a MVP level.

Startup Another approach would be to work for a Startup and then you will get see all the code, and be responsible the whole stack.  Thus you end up be responsible for setting up the deploying to AWS which you may not in larger companies who may have a Dev Ops person.  You will have to learn a lot more and faster.  It is also likely you will make mistakes through your journey. This journey would likely teach about one codebase to a deeper level then the Agency approach.

Do you have any tips?

I would suggest you blogging your own journey, it will help you remember what it was like to be a junior and when you take juniors on yourself you can help them with your blog post and also remember not to be a dick ;-)

Visual overview of Ruby on Rails


rails_breakdown_v4.1

Please give feedback

Version 0.1 – credit Brooke and Eric

Version 0.2 – Made full size, made core library labels bigger, bold text and strengthened lines – credit Andrius and Trevor

Version 0.3 – Make it clearer , between the different core libraries – credit Chuck

Version 0.4 – Get the capitalization right for Classes and Modules – credit BLITZCRUNK123 (Reddit). Have also added more and defined the difference between capabilities and Class/modules.

Version 0.4.1 Make it clear what the version is for- credit _jeffJohnsonsBookEmp  (Reddit)

Actions speak louder then words

A person, company, organization community can be judged on its actions and behaviours not its intents. Especially when the shit hits the fan. Its easy to be nice when the world is all good. Behaviours, the culture under stress shows the real capacity of the leadership.

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 off 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)

Becoming a coder, again..

This set me off in a two year journey to become a developer. I took two evening classes a week (about 20 hours a week) and over two years worked seven days a week. In all I did 13 courses (including HTML, CSS, JavaScript, AJAX, XML, SQL, MySQL, PHP, JAVA and System Design).  I started with an intense HTML course and worked my way through the whole stack from front end to back end.

a few of my coding books

a few of my coding books

Rails..

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 I needed to know rails better first.  Additional good Rails book that helped in my journey were  Rails 4 in action  Rails Anti patterns , and Peepcodes Videos on RSpec.

Ruby

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 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.

Learning about software 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)

  • Re-learning Unix and BASH i.e. Terminal on the Mac
  • Trying out different tools, BBEDIT, RubyMine and finally Sublime
  • Getting comfortable with version handling i.e Git, how to use GitHub
  • Where to find the bugs for debugging, using irb, rails console, understanding the logs and the stack trace
  • 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)

Ready?

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..

Advertising myself..

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

Hello :-)

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 :-)

Eric
—-

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:

  1. 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
  2. How much they truly bothered to explain who they are as a company and their intended culture, mattered to me.
  3. You need patient senior developers who are willing to coach and that their bosses will give them the time/leeway to coach
  4. That you will learn a lot from developers who have different styles and roots, prefer different languages and frameworks
  5. I need to grow and learn fast, how are you going to help me get to intermediate?
  6. Seniors that have being teachers or parents tend to be better at explanation. Just a theory at the moment.

Interview

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 -

  1. Have you ever had any juniors before?
  2. How do you review code?
  3. Do you use pull requests?
  4. Do you state why the code is wrong in the pull requests?
  5. How will help me growth fast, so I am no longer a junior?
  6. Is there flexibility on which projects/teams I work?

Technical tests

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.

Updated

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.

the need to reflect on yourself

Mirror

I am a workaholic (I never feel I work hard enough), there used to be a few things that make me pause and force me to reflect such as illness, love, friends, mentors, etc. Sometimes these “interruptions” are random and infrequent and may not occur for several years.

Life has taught me to occasionally pause and consider who and where I am.

Every year now I review my life, I considering all aspects and what I need to change or not. At work they would call this a performance review.

You in the end, are the only person you have to live with throughout your life, you need to stay in touch and avoid too much drift. A little drift is good because it can allow you to reflect and consider new paths.

I use the following categories to help me breakdown what is important.

These are my personal ones that have change throughout my life, you may have different ones, over time you will find that they will evolve.

1. Love

Is there enough love my life in terms of relationships, friends and family? Are there people in my life that cost more then they give/gave? Am I giving enough to them? Do I Love myself? Does your “friend” spend more time talking about themselves then asking you how you are? Who helps you out when your are sick? Who calls you out on your stupidity? Of course these questions are reversible? e.g. are you a good friend to them?

2. Purpose

Am I working or playing towards something? Am I just floating? Am I happy with my level of progress?

3. Community

Am I giving back? Am I mentoring, teaching or helping others grow. Am I paying attention to politics and the communities needs?

4. Evolution

Am I still the same person or have I evolved? Am I growing and learning? Am I pushing the boundaries of my personality, my knowledge, and my skills. Is there enough challenge in my life?

5. Inspiration

Do I have muses? Do I have people? Books? Music? Arts? Games? Food? Is there something refreshing my soul? Do I have moments to explore or simply rest?

6. Health

Am I healthy? Do have the body that I want? Can it do the things I want? Do I eat as I should? Do I sleep as I should? Are you snappy with friends? Do you need time off?

7. Work

Do I enjoy it? Do I have a leader who inspires me? Does the organization value me? Am I able to use my core capabilities? Is the cost of working for them matched by the value I receive? Yes I give my work a performance review – are they what I need?

8. Finance

Do I have enough? Do I have plans for when things go wrong? Do I have saving goals/purposes.

9. My Drivers

Over time you will start to see patterns in your behaviours, things or people you prefer to be around.  It has helped me understand that I have certain drivers (some good and some not) for example I am incredibly curious, I want to know why, but do I spend too much time exploring/discovering and not acting?  There are things that I sometimes find difficult to manage e.g. being a workaholic do I make sure that I have enough rest and/or vacation, is my health good?; we are all better people to others when we are refreshed.

Making it real

Often I will draw a mind map for each (1-8) and then give it an overall score between 1 and 10. If it is lower then 5 I start to consider how to improve it, by adding things that could improve the score on my mind map on the edges.  I build an action plan for the next year e.g. If I do not have enough Love, should I meet new people, do I deepen the my relationships that are good for me, or do I remove people from my life.  After completing  all the mind maps I consider the bigger picture and the inter relationships between each mind map, e.g. could I kill two birds with one stone? Or is one so high and at the cost of others e.g. Work is at 9 but Love is at 2.

Then I will consider my drivers. Some of these drivers will clash with others, how are you managing that balance? I draw an illustration for each of my drivers and consider both the good and bad of each.

Then I again I will look at the connections between all (1-9).

This is the way I consider my life on an annual basis, you may have different things that matter, different drivers that push you. I urge you to discover who and where you are and how to make sure you are in control of your life, not too much control, but enough to be heading in the direction that you wish.

Building an open source program for technology co-founders

In February I wrote a blog post about the lack of support for technology co-founders in BC, Canada.

I have decided to pull together an open source program/set of courses to educate/grow/upgrade technology cofounders, to increase their chances of success in their role.  The first step will be to collect ideas/experience/wisdom from the community and then pull it into a bunch of classes that a person can work through at their own pace.  It is my intention to build it so anyone could actually run it as face to face classes, in their local area.

How can we help each other to avoid mistakes that others have suffered?

How can we help each other to avoid mistakes that others have suffered?

The idea.

Create an open source resource/courses/program that people can run in their local area to educate/grow/upgrade technology cofounders, to increase their chances of success in their role as a technology cofounder and grow into a full CTO role.

The Why.

There are many, many programs that support the business/leader/ceo co-founder but few I know to support technology co-founders.

Motivation.

To help technology co-founders avoid mistakes, learn from others experience and build the quality product

Target audience Technology co-founder of a startup (Startup levels) with the intention of building a fast prototype to prove the concept.

Boundaries

To stay platform/technology agnostic

Journey

I will start with a level one startup and build through the others

Please share this link and come and contribute to the program at https://github.com/ericbrooke/ctofounder/wiki this is a wiki in which will collect all the ideas, suggestions for people we should interview, good resources you have already found and learned from..

We need the views of:

  • developers,
  • those thinking about creating their own startup,
  • those who are in it creating their first production,
  • those who have supported technologists on their journey,
  • those who have done it several times.

We don’t care if you have succeeded or failed share it!  We need all your questions and experiences :-)

Follow

Get every new post delivered to your Inbox.

Join 1,290 other followers