Author Archives: Eric Brooke

I will vote yes for the Mayors Transit plan

I will vote yes for the Mayors Transit plan for Vancouver, BCThe road ahead

I would like Vancouver to become a better place for everyone. That they can get around easier without cars (e.g. children/elders, the vulnerable), that they can choose jobs/schools further afield, that they can explore more of Vancouver and discover “new” shops/businesses to become customers of. I would like to see a city that manages its carbon footprint better as it grows. A big step to ensure our future is smog free is to invest in our public transport infrastructure.

I have seen the impact of under investment in public transport. Rising house prices, congestion, more anger from traffic jams or the buses being full, the reduction in family time due to longer commutes, smog and the impact on businesses. People’s health (both physical and mental), finances and job satisfaction all take a middle and long term hit.

It can be easy to fall into the trap of anger. You pay your taxes, you pay for your monthly bus pass. And then the bus you rely on is late, or is full, and you miss an important meeting or you’re late to a friend’s birthday. The anger and the disappointment have lead us to resentment, and it is clouding or judgment in this matter. We have to find it within ourselves to move past the anger and to forgive. Only once we’ve forgiven can we begin to see the solutions, and begin to part of the solution. Don’t simply look at this campaign as voting to part with your money. Give Translink feedback on the changes you want to see, on where you want the money to go, and how you wish to hold the organization accountable for the future decision to be made. And most importantly, don’t simply think of improving your situation. Remember the elderly person down the street who needs Handydart, and how a line to UBC would improve the state for students.

It is the glue of our society and our community.

Whilst I appreciate that my tax dollars are going into this project, I will not wholly benefit myself as I live downtown and walk 30/40 mins to work. Even though I do not care to ride a bike (as I prefer to walk), I appreciate the need for them – they give us the option to be car free. Community is not just about my personal needs, it is also about how kind thoughtful I am, my willingness to share and collaborate with all.

I believe that Translink is not perfect, as no human organization is. Destroying an organization ignores the fact that we as humans can learn from our mistakes, and organization are no different. Many of us have relied on the forgiveness from “our bosses” when we got wrong, to not be fired and instead to learn from our mistakes and grow.

As citizens we are the boss of our public transport infrastructure. And the best “bosses” allow us for experimentation and innovation — which always comes with the risk to get it wrong. The worse bosses stay angry and persecute us for past transgressions that have now being corrected. Innovation is key to our survival and future and if we kill it with anger and mistrust, we will fail as a human race.

This reminds me that as a citizen of Vancouver and of BC, to pay attention to politics both at the city and provincial level. To not trust the “facts” delivered by angry bloggers, who have no accountability, and instead to listen and to research, to discover if their comments are true or false.

It is important for us to look at how Translink is held accountable, how it grows and learns both from its customers, its employees and the “Governments”. How it learns from other cities successes and failures.

I have applied to be on the Citizen Council for Transport because I want to do my part. Whether I succeed or fail I am becoming better informed!

I have hope for Vancouver to become a better city as it grows. Going forward, I will pay better attention to those that serve us. I am one of those crazy people who still says thank you to the bus driver when I get off, because I appreciate the human that serves us — whether it be the bus driver, the union that protects their rights or Translink who manages our infrastructure. All three have had to do this in an environment that is underfunded and not ready for the future, because citizens have not been doing their part. It’s time to change this and think/reflect/imagine the city we want.. become solution providers rather than just armchair critics.

One rainy Whistler and #smashingconf

When I first saw that Smashing Mag was coming to Canada and close by i.e. Whistler, BC.  I booked an Early Bird Ticket.

I have found both their emails and books very useful.  I paid with my own dime, so I could not afford the workshops.  Most of my multiple day conferences have being Rails/Ruby/Data/Product/Startup so I was very curious what the people would be like at a Front end conference.

Eric on stage

The main stage at the smashing conf. One of my Photo BINGO photos

It was a mixture of designers, developers and product people.  This conference was a good mix of people, nationalities and friendly. Culturally it felt like a fusion of an European and North American conference.  The lightning talks (the evening before the conference started) were a nice touch i.e. short talks given by conference participates who were not speaking as part of the main schedule.

I learned, relearned an incredible amount of information. The conference was well organized, the staff were friendly.  To be honest I think I am still processing some of it.  The food was good.  The venue was good.  The main room was a little dark for me, but there was an ALT viewing spot with couches and a fireplace and skylights, this was awesome. I felt overall the conference itself was good value for money – but I did get it on early bird :-) The workshops felt expensive.

smashing conf audience

smashing conf audience

VITALY FRIEDMAN “Its important you should not FREAK OUT!” opening #smashingconf in #whistler

You can find most of the decks here you can see the twitter conversation at #smashingconf and I will add the link for videos when it appears.

IMG_2311

My Learnings

  • First make your site fast
  • Deliver core content first, then progressively enhance
  • Pay attention to size of everything and what it is blocking
  • Make it responsive. Build for mobile first.
  • Design in the browser, wire frames are wasted time for designers
  • Always consider accessibility
  • Have a style guide that everyone is responsible for maintaining
  • Use sessionstorage and local storage
  • Make it all modular and plug and play
  • Design is not a service. Designers have to sit in the team

Things to explore

The future is

  1. SVG Fonts
  2. <Picture>
  3. http2
  4. Service workers
  5. Offline, maybe..
Rainy Whistler

Whistler on a rainy day, with no snow in the village

Things for the organizers to consider:

It was a really well run conference, here are some ideas to add a bit more magic :-)

Pre-Conference ask the attendees what they really want

Send out a questionnaire what are the top three things you are trying to figure out. Share the results.  This would help guide the conference, spot trends that are emerging.  Encourage lighting talkers, to talk on similar topics or not.

Help lone travellers meet others

Make it easier for people to “hook up” for dinner plans.  Extend the attendee list with peoples interests, linked profiles/online bios (The current one being shared with twitter accounts was awesome).

Have a wanted board

It could have jobs, types of people they want to meet, problems they are trying to solve.  It could be online or offline.

Apprenticeships

At the Ruby on Rails Conference (Railsconf) they have scheme, which allows a number of students and diverse backgrounds into the conference for free.  They also ask for volunteers to act as their mentors throughout the conference. I am sure some of the sponsors would consider giving

Other thoughts

I just covered the talks I watched in full.

Marcin Wichary

A great talk about typography, perfectionism, underlines and sanity. Funny & serious well presented

Deck – aresluna.org/whistler

Susan Robertson

Use style guides as a way to explore, define and guide.  Make it part of feature development. Examples for automated styleguides for web sites

A great resource http://styleguides.io

Deck – https://speakerdeck.com/susanjeanrobertson/style-guides-why-bother 

Yoav Weiss

mix & match <picture>/srcset/<img>/<source> to give users a specific image file according to viewport & display quality. <picture> is not ready yet but hopefully soon.

Deck – http://yoavweiss.github.io/smashingconf_whistler/#/

Marcy Sutton

Start at the beginning and make it part of the process. ARIA accessibility helps out with JavaScript.  All of us someday will need websites to be accessible as our eyes fail us.

Getting start with ARIA

Deck – http://marcysutton.github.io/a-web-for-everybody/#/

Jenn Luksa

Great presenter and Sass to boot. Resources

Deck – http://www.slideshare.net/JennLukas/smashingconf-whister-developers-ampersandwich

Stephen Hay

Design in the browser. Wireframes are wasted designer time. Sketch.

  1. Focus on small screens first
  2. Then colour and type
  3. Uses a sketch in code tool

Deck – http://www.slideshare.net/stephenhay/sculpting-text-easing-the-pain-of-designing-in-the-browser

John Allsopp

Cache do not use for performance.  Use sessionstorage and localstorage

Deck – http://www.webdirections.org/speakeasy/presentations/SmashingOffline/offline.html

Dave Shea

Choosing your journey with CSS is more about the communication and how the team views it, rather than the methodology you use

Don't grow up to be a specialist

Jonathon snooks talk

Jonathan Snook

Do not grow up to be a specialist, explore, play and grow. Luck is what happens when preparedness meets opportunity http://snook.ca

Deck – https://speakerdeck.com/snookca/becoming-a-deep-generalist

Brad Frost

Atomic Design –  a methodology for creating robust design systems. Working from the ground up. Example http://patternlab.io

You thing your resigning the web, but are redesigning how people work

From The Guardian talk

Patrick Hamann

Well presented and a great case study.  Build modular and decoupled systems. Design features for access(deliver in layers) first. Embrace the unpredictable nature of the web. Every feature must be measurable. You can see The Guardians Front end here https://github.com/guardian/frontend.  Their Mobile site is faster than their Web site.  Consider what you put in your first 14 KB, load the html first, JavaScript & fonts next (this usually stops the page loading), than analytics and adverts.

Deckhttps://speakerdeck.com/patrickhamann/building-theguardian-dot-com

Val Head

Awesome fun lady. CSS can do some cool animated interactions. Choose the mood that fits the brand. Timing 0.2 to 0.6 seconds.

Deck – http://www.slideshare.net/valhead/putting-your-uis-in-motion-on-the-web

Paul Irish

Getting to fast – I did not see this talk, and I am looking forward to the video release :-)

Deck – https://docs.google.com/presentation/d/1qoginKKkdrRpIPGjJakt1y17iXsIBSaInaHbR4JyCIk/edit#slide=id.g330e5fec5_00

Eric's badge

My first vote in Canada

For my first vote in Canada (I became a Canadian Citizen this summer) I spent much time researching the political parties, their records and their personalities. Including watching a city council meeting and attending one of the debates.

Still it was really hard to see the difference between the Vision party and the NPA. I found both the websites unhelpful in understanding the parties and how they differed.

The current Mayor Mr Robertson (Vision) and Kirk LaPointe (NPA) seemed to agree with each other on most topics.

It took a little digging into the councils minutes to get some feeling for the local politics. The campaign started to help, but it was the local newspapers that really did the work to show the differences. The debates also helped, in showing the temperaments of the mayoral candidates.

In this election, Vancouver City 2014 (BC, Canada) I voted for Vision across the board. I was disappointed that we are still using an ancient voting system (first past the post) rather than a modern transferable voting system. Splitting your votes across parties generally leads to weak indecisive government, unless they have experience working in a coalition. Thus I did not do it. It appeared to be a campaign that seemed to be a two horse race between Vision and NPA.

Vision had enough of the left of center perspectives without dismissing the liberal concerns. Robertson has also worked hard to get know part of the Startup Community, which I am a member, though I have never met him. He is also outspoken on protecting those less fortunate in life.

I really appreciated the profiles that the Vancouver Sun did on the two mayoral candidates – Robertson and LaPointe.

I did not appreciate the attack ads that the Vision campaign ran on Kirk LaPointe, they were tacky. They attacked the person not the party (in his case NPA). This made me pause to think about if I wanted to vote for any Vision candidates.  There are smarter ways to run a campaign and stay respectable.

After running 110 election campaigns (Liberal Democrats and NUS) I never resorted to personal attacks. OK maybe I did when I was immature. Yes, I know negative campaign works. And sometimes the media likes to add a certain “flair” to their words to get the attention of potential readers.

So, do we not have to become smarter, wiser and better. How we do things is important. Maybe I am being too idealistic, some campaigns may need it, I am not sure this one did. In fairness I am without all the facts, the polling data, etc. Is it better to lose and stick with principles?

Having been elected to public office (County Councillor for Newquay North, UK, 2005) and had the honour of a cabinet position (Community & Culture) my opposition taught me many things. The need for scrutiny, really listening, debating points of policy, forgiving others, strategy, how to be the better person when you lost and yes how to run better campaigns.

County Councillors 2005 - 2008

Cornwall County Councillors 2005 – 2008 – UK

I am a better man for both my party and the non party members of Cornwall County Council (2005 – 2008). Some would call the non party members opposition but after six months I did not view it like this. I saw them as opportunities to be better, and thus I worked at getting all involved in the decision making, made scrutiny of my work easier, taking the time to actually understand their needs and always having an open door policy to all. Also appreciating that you often have two relationships with other politicians, the public and private. As a Liberal I feel I have the responsibility to be open minded, listen and understand first before making my decision. Even when it is difficult to hear, freedom of speech.

Here I will say it, strong opposition makes a government stronger. As long as the agenda is to do the best for the residents not the political party. Which frankly is sometimes as long as half your term of office, if you are lucky. Critical reviews can be helpful and harmful depending on the agenda.

Having a Mayor like Mr Robertson who has strongly held beliefs on the environment may find it harder to get funds they need for infrastructure projects, quickly. But they are more likely to create a city that I want to live in and interact with my communities. Those who invest in the Parks, Communities and Culture, create an environment to de-stress, meet random people and form more community and ideas. This translates into less single people, greater entrepreneurship and more collaborative community. We all hide too much in our places of living or in our circles of friends and family. Do we want an inclusive culture and community or do we want differences to divide us? Thus I also voted to give the council ability to get and spend fund on all three areas.

Having a bureaucrat, which is how I saw Kirk LaPointe, may have been more successful at getting more funds and more businesses into Vancouver. But is that the kind of the city I want to live in? And whilst I liked Kirk LaPoint (yes I have met him many years ago and liked him) I did not wholly trust NPA, it felt they cared more for business than the community. Vision clearly needs to do a better job of being open minded as it felt they dropped a candidate because she worked in sexual health. Of course no party is perfect, but at least there is some process to vet the candidate before.

A balance with the community and environment matters to me. A balance between business and environment. After all we need jobs but not at the cost of the only planet we live on. And I am happy to pay tax, to protect the vulnerable, provide a safety net for all of us when shit happens and give education opportunities to allow us all to climb the ladder. And if we kill the planet we are dead, both physically and spiritually.

Who else should stand up for Vancouver and it’s beliefs if not the Mayor? Thus I went with passionate advocate not the bureaucrat.

P.S. Now I have to work out which way to go between Liberals and NPD for Provincials and Federal.

Things I need to understand better:

There are a couple areas I need to become more knowledgable in and make better decisions on who I vote for. I know how these issues are tackled in the UK but I am still learning how they are in Canada.

Density

Some very smart people state that for future our cities they will have to become more dense. These smart people often live in very big houses outside of these dense zones. Apartments that are built today are small.  Their kitchens encourage eating out and not cooking at home, with local foods. They do not encourage eating at a table and the sharing of food.  I wonder if this is why coffee shops are so full of people, because their apartments are so small.

Apartment blocks are often built so that you can completely ignore all humans around you. I do not have a problem of sharing space with other humans, but we all need space the current trends are worrying.  This is partly related to our green spaces in Vancouver, we need to keep a balance, we all do not have cars and log cabins in the country.

House Prices

I feel developers/estate agents are making so much money, and in the process are creating the largest social divide in our society.  Affordable housing is often a box with with a smaller box extension. More and more people are being excluded from the opportunity to buy in Vancouver.

Freedom of Information

This is a must especially with all the above worries. I heard criticisms towards The Vision team, I will have to explore this further.

Public Transport

We need more public transport and less cars. Whilst I prefer to walk rather than I bike, I feel the journey for more bike lanes is a good thing.

Homelessness

I feel there are many threads here, essentially how are we helping vulnerable people in a sustainable way and how are we helping people become independent again (if possible). I realise this issue is not simply about a place to live, but sometimes can be about how we treat mental health in our society.

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.

Follow

Get every new post delivered to your Inbox.

Join 2,233 other followers