Install this theme

Posts tagged: reflection

Pair Programming with Pat Maddox

When I woke up Saturday, my goal was to write a post reflecting on my experience pair programming remotely with Pat Maddox who had recently invited anyone who is interested to pair with him. Once I started thinking about how I wanted to approach the post, I thought I needed to talk about remote pair programming in general and how it has been a great way for me to learn and interact with more experienced rubyists. However, a converstaion with Evan helped me realize that what I have stumbled upon has a much greater value outside of being a great learning tool for me. So here I am at around 9 PM on a Sunday night finally starting to put my thoughts down on my experience pairing with Pat Friday evening.

First of all, I want to thank Pat for making time to pair with me as well as for taking the initiative to invite people to pair with him. It is really great opportunity not just for beginners like me who can learn a lot from pairing with someone of Pat’s caliber but also for other members of the community to be able transcend the limitations of physical distances and come together to work on a problem. The whole concept of leveraging the internet and tools that we have at our disposal that allows us to collaborate with one another deserves the kind of spotlight that initiatives like Pat’s will bring to it. However, I have already talked about that in previous posts and want to focus more on the specifics of the experience pairing with Pat here.

Test Driven Development (TDD) is something that is very new to me and has only recently been part of my practice in my journey through the long road of learning Ruby and becoming a better programmer. Therefore, it is still a skill that I struggle with. So it was great to work on a code kata with Pat and see how he started out with an acceptance test that was going to fail. This was the test that would tell us that we are done, once it passes. However, to start making progress, we decided to make the acceptance test pending and focus on figuring out what the maximum temperature for that day was. Similarly, we wrote another test that told us the number of days in our dataset. While these tests were not really testing the crux of the application, they helped us make progress on the problem and that was a great tip to learn.

It was clear that Pat has been doing pair programming with people from various skill levels. He was very good about encouraging me to drive and always asking what I thought of the approach we were taking. I immediately felt at ease with sharing my opinions as well as asking questions whenever I got confused about the code. Pairing on a Kata was also good because it was small enough problem that we could understand the domain pretty quickly but big enough to provide interesting problems to solve. One of the things we had to ensure was to ignore the unnecesary text in the weather data file. We also encountered a bug on line 46 where our previous code looked as follows:

The problem was that while we made sure to strip the line when we looked for the line with weather data, we sent the parser the line with preceeding spaces which caused our parser to extract the wrong weather data. This kind of bug would have taken a while to figure out if it was just one person programming but between the two of us chatting, we were quickly able to find it, fix it & be well on our way. The test suite, no matter how sparse it is, definitely helped too :).

Even though we only got around to finishing up part 1 of the kata, I look forward to pairing with Pat again in the future to work on parts two and three of the Kata. It was a really great learning experience and I encourage anyone who is interested in Ruby to take Pat up on his offer and pair with him.

College, giving back & Mountain West Ruby Conference 2011

As a freshman international student in the United States, I had a lot to adjust to and take in. However, since I had to figure out how to get a job quickly so that I can start the much needed revenue stream to pay for subsequent semesters, there was very little time to take in the scenery. This helped me focus my energy on paying for school and not getting distracted. I was working twenty hours a week during regular semester and working 40 hours over breaks. I even had to pass up an all expenses paid trip to San Francisco for Spring Break because it meant an opportunity cost of $500 in much needed emmergency funds. It was a good lesson in bootstrapping. I remember using my academic planner to forecat my financial health into the next semester. The feeling you get seeing your bank balance deplete at a much faster rate than your revenue stream never let the focus shift beyond what was necessary: paying for school.

While there was an advantage to this in that I was focused, I quickly realized I was working towards paying for an education but not necessarily making the most of it. The amount of time spent working maximum hours allowed meant that I did not have enough time to focus as well as I would like on learning. While this was sustainable as a freshman, I quickly saw that it would be very challenging as a senior. This meant that I needed to get into a better school with a stronger financial ait program so that I did not have to worry about finances and could focus more on my education. I am not going to lie, having the option to socialize & party a little more definitely crossed my mind as well. However, another benefit that I did not realize then but quickly became clear after a semester at St. Lawrence was that by not having to worry about the finances, I could actually focus on giving back to the community for their generous gift of education in addion to learning. This time allowed me to organize international events and a fundraiser to raise money for the tsunami victims. The experience taught me a lot and one of the major takeaways for me has been the importance of giving back to people, institutions and communities who have gone out of their way to help you in some way.

The reason I am talking about giving back is because I was recently humbled by the generosity of Brandon Hays and David Brady who have assured me that I will have a place to crash in Salt Lake City for Mountain West Ruby Conference 2011. David thought starting a pledgie to help pay for the trip there was my best bet and Brandon was quick to get it set up. I am not sure how true Brandon’s claim are in terms of MWRC needing me more that me needing MWRC but I am very grateful that Brandon has made a generous first contribution along with getting the campaign set up.

I have heard many great things about Mountain West Ruby Conference & David Brady was telling me last night how active the Ruby community up there is. It would be nice to meet Brandon and some other RMU alumni in person as well. However, I feel as though I have not given back to the community as of yet to demand that they help me attend a conference. So what I would like to do is to ask those who are considering to make a donation see it as a loan that they demand I repay with contributions back to the community. If the generous people in the community feel like I have not made an impact in the community by RailsConf 2011, I would like you to hold me publicly accountable and demand that I deliver. This is my only request to Brandon who has made his contribution and others who might be considering making a donation to get me to Mountain West Ruby Conference in 2011. Thank you all in advance!

The story so far in my journey

Hi I am Ashish Dixit and I am an aspiring rubyist who has fallen in love with the the process of creating software. I was born in Kathmandu, Nepal to two of the most amazing people in the world I know: my parents. They have managed to do a solid job of raising me and have always been a driving force in my life.

I came to the United States in 2002 for an undergraduate degree in Computer Science. I had always been really interested in computers but we could not afford one until I was in high school so I did not have much experience in programming outside of few things on Basic I picked up in middle school. One of the reasons I chose to come to the United States, outside of the fact that US has the reputation of having one of the best higher education systems in the world, was that I was slowly realizing that I was starting to take things for granted. Since my cousin was working towards his undergraduate degree in United States, I knew of the challenges as well as benefits of coming halfway around the world for an education. When I look back now, while it was not easy, it made me a stronger person and taught me things that I would have not been able to learn in any classroom and it still fills me with a sense of accomplishment that I was able to pay for my own education outside of the eight thousand dollars that my dad gave me to make something of myself in the United States.

I am a strong believer in the philosophy that freedom to do what you want comes with the responsibility to face the consequences and owning that choice. However, after completing my undergraduate degree and finally landing a job that sponsored my H1-B work visa, I was starting to get comfortable. I had wanted to learn Ruby for a while because I was attracted to how it was optimized for developer happiness. However, I had always struggled with either following a book through completion or not really feeling that I internalized everything in the book to be able to build something of value when I did finish the book. I was slowly starting to realize that I was not taking ownership of the process so I decided to become more active in the user group, even if it meant it was a 3 hour round trip. That decision was what started my immersion into the Ruby Community in 2010.

The New York Ruby Meetup is a great community of people and my experience there was what gave me the confidence to give the Ruby Mendicant University(RMU) entrance exam a shot. I was stoked to find out that my submission was accepted and I patiently awaited for the October session to begin. In the meantime, I decided to take my community immersion to the next level and attend a Ruby Conference. My friend had recently moved to Austin and I knew an alum from St. Lawrence who had been of great help in guiding me traverse the “real world” since I met him a few months before graduation. I had enough travel points to get me a ticket for free which meant that my only investment was going to be the conference pass. The decision was not easy but I knew that I had to be around people who are doing cool things to get the juices flowing in me so I decided to go. It was a great experience and I even managed to convince Jim ‘Big Tiger’ Remsik to interview me for Hashrocket.tv (can’t find the link to it though since Twitter doesn’t keep tweets that far back).

It might have been the tacos combined with the really great lineup of talks and the fact that I won [a book] that I was hooked on just going to events. I had managed to hear about Ruby DCamp and signed up just in time before the event sold out. Evan Light, who organizes it every year, had convinced me that it was beginner friendly and I am glad he did. I had never been to an (un)conference before and while I had heard about code retreat, I had never attended one. So I did not know what I was getting myself into, especially since it meant 16 hours of driving from Connecticut to Virginia roundtrip but I knew I enjoyed driving and I had realized how much I enjoy being around rubyists. Since the event was free, the decision was easier but after going to one, I would not mind paying for it. It was an empowering experience because despite my lack of experience with Ruby, I was able to “lead” a talk on code reading that evolved organically with the participation from everyone.

I came back inspired, along with the rest of the New York Ruby Meetup crowd & immediately started a sister meetup focused for programmers who want to learn Ruby by hacking on problems. The structure of this was similar to code retreat way of working on different problems using Pair Programming & TDD. Given the nature of the meetup, we knew we had to find venue sponsors for weekend sessions which has proven to be a challenge but the interest in it is still there and the one meetup that we managed to find venue for was successful.

Ruby DCamp was also a great inspiration that helped me get through the challenging core skills course for RMU in October. It was not an easy class by any stretch of the imagination, especially for someone who is new to Ruby such as myself but it was a truly rewarding experience. In the three weeks that I spent in October for RMU, I learned how to structure my Ruby project, familiarized myself with design patterns and implemented one myself, and made a few open source contributions. The community around RMU is just as awesome and it was a great, after 3 weeks of intensive work for RMU during nights and weekends, I was granted the alumni status for successfully completing the core skills course. Even though I had to use up my vacation days & finance the community involvements myself (which meant I could not go to RubyConf X even though I had won a pass at the last minute because I had ran out of vacation days & strapped for cash), I am very happy with the experiences I have had and look forward to many more in the future.

So long story short, while I came into Ruby for the syntax & ease of writing clean, elegant programs, I fell in love with the community that is constantly working towards improving themselves. This focus on constantly learning and improving resonates with me and has lead me to committing myself on the long road towards becoming a better (Ruby) programmer. With such an amazing community to learn from and to get inspired by, I am certain that as long as I continue to focus on shipping and keep learning one step at a time, I will be rewarded with success. I have my parents who are a constant source of inspiration to me who are always encouraging me to seek the best in myself. It’s their lesson of hard work and determination that has allowed me to come to the United States and make somewhat of a life for myself here and I have no doubt that their support coupled with the awesome community of professionals, I will be able to make my dent in the universe and be a self-made man, just like my Dad.

Ruby Mendicant University - an awesome initiative with a remarkably talented & humble community

I want to start out this post by saying that it has been a long overdue that I publicly reflect upon my RMU experience. I had jokingly mentioned that people might have to wait till early January for this post but little did I know that I was underestimating my power of procrastination. Fortunately, as the old adage go, it is indeed better late than never.

For those who may not know about Ruby Mendicant University (RMU), it is an initiative that Gregory Brown started with the help of his wife Jia and Jordan Byron. The goal is to provide free education in Ruby as well as fundamentals of programming and other relevant skills for people who are willing to put in the necessary effort to improve themselves as well as become a contributing part of the community. It started with an idea and has since gone through a few iterations. As a result, it has become a great resource for rubyists who wish to improve their coding skills. The core idea behind the initiative is that (Ruby) education should be free for those who want to take the initiative to improve themselves, an idea that has always resonated with Greg, who made sure that the published or his book Ruby Best Practices allow the book to be downloaded freely.

Around the time Greg came with the idea of RMU, I was seeking the right kind of opportunity to immerse myself into Ruby. I had started being a regular at the New York Ruby Meetup where I was meeting great rubyists and having amazing conversations but I still had nothing to show for it. When I found out that my entry for the entrance exam was selected, I was beyond excited. I knew it was going to be an intense three weeks that is going to stretch me further than I would have stretched myself but I was confident that I would have improved immensely coming out of that experience. I was not wrong.

RMU brings a project based approach to learning and making the process more fun. It demands a certain level of effort from the students, usually 10 to 15 hours of effort per week when you are taking the core skills course but your RMU experience only begins with that. The selection process, which has undergone some changes recently, is a crucial part to both communicate the level of effort expected as well as to gauge whether the student interested is ready to take on the challenges of the core skills course. When I joined RMU, I knew that I was at the lower end of the skills spectrum so I knew I had to put in a lot more effort. Again, I was not wrong. Let’s just say that I have not relied on 5-Hour energy as much as I did in October 2010 :). One thing that I can guarantee you and that once you successfully complete the core skills course and gain an alumni status, you will notice a remarkable improvement in your ability to solve problems using Ruby.

Prior to RMU, I was not completely certain how to go about creating a well structured Ruby project. Yes, a look at any well known Ruby project on Github would give people some idea of how a project should be structured. However, going through the process of creating projects on my own helped me realize not just the how to part but the reasons why we do it. Before my RMU experience, I was only familiar with the idea of design patterns but I was not only able to learn about some patterns but I actually implemented the Template Method pattern. Going into RMU, I had only the desire to contribute to open-source projects but RMU gave me the platform to not only make contributions to the university-web project but also fork an existing library that serves as a wrapper to the Github API and update it to version 2 with few additions that I needed for my personal project.

Throughout the course, Greg was always there to provide feedback and help me improve my code and egg me on to do the work and ship. The community was also there right behind me cheering me on and giving me valuable feedback as well. It’s this passion to helping so many like me that makes Greg an amazing member of the Ruby community and it is what inspires rest of us to do our best and give back, not just to the internal RMU community but to the greater Ruby community as well. It is rare to meet such a smart, humble & ever ready to help group of people, even for the high standards that Ruby community is used to and that enriches the RMU experience. You don’t have to take my word for it either. Brandon Hays came into RMU with very little programming background and has made inspirational leaps and bounds in his ability to write code and has already started contributing back to others who want to walk the same path. It might seem a little bit of a hyperbole to call RMU life changing as someone who reads Brandon’s account but I can assure you that he is spot on. RMU will definitely have a positive impact in your life and it will help you see that with the right level of effort, a passion to improve and a great community constantly rooting for you, you can soar to new heights.

Running such a program clearly needs a certain level of effort. As a result, Greg has dedicated himself fully to RMU and has stopped taking on any consulting work. Therefore, to ensure sustainable growth of RMU, we need your help. Greg is always thinking of ways to have a sustainable revenue streams for RMU and as such, there is a way for people to help RMU while improving their ruby chops by signing up for the Practicing Ruby newsletter. Greg, Jia & Jordan put a lot of effort into RMU on a daily basis and they definitely appreciate all the help people can extend to ensure that RMU will continue to be a great resource for many more programmers who are interested in becoming better at what they do.

If you are someone who wants to become a better (ruby) programmer, I urge you to take a good look at RMU. You can go to the main site, check out the mailing list and join us on the official #rmu channel on freenode. If you have any questions, someone will be more than happy to help you on the mailing list or the channel.

So there you have it, my reflection on my RMU expereince, about 3 months later than I expected & not without a tumblr incident. I cannot thank Greg, Jia, Jordan and the RMU community enough for what they have given me and I can’t wait to pay it forward. I have to publicly admit here that I have been a little distracted and have not been able to give back as much attention as RMU deserves but I hope to change that in the future. There are no words to express my gratitude and so I hope to return the favor with actions. With that, I give everyone the right to publicly shame me if I do not show any signs of giving back to the community that has given me so much.

UPDATE: Since writing this post, Greg has made a tough decision and the practicing ruby newsletter is going to be discontinued in the coming weeks. Therefore, I suggest that you only subscribe if you are interested in receiving the back issues and/or supporting RMU. I also would like to remind you that if you wish to support RMU, there is a pledgie set up and you can help ensure that RMU continues to run sustainably by donating however much you can. Thank you for your support.

The New York Ruby Meetup

If you are a ruby programmer/enthusiast living in New York City, I already know two things:

1) You need to attend the New York Ruby Meetup

2) I am extremely jealous that it does not take you 3 hours round trip and planning in advance

The second part is something that is only relevant to me so I won’t go into it but let’s focus on #1. The reason I say you need to go is because it’s a great group of people hanging out and talking about Ruby as well as other related technologies in the landscape. The organizers, Matthew Jording and Haris Amin, do an amazing job of choosing topics that vary in range from very beginner friendly to some advanced stuff.

What makes it even more fun for someone like me who has limited experience in Ruby, web development and open source tools is that it is an active discussion rather than someone giving a talk with others listening. If you have ever been to an unconference (if you have not, I highly recommend Ruby DCamp and I have heard a lot of good things about Bohconf), you will find that the meetup is inspired by the participant-driven nature of unconferences. If you are a code slinger, the group has a Github organization page and the group gets together now and then to work on some code together as well. Since it’s a social group, people usually hit a local bar in the area after the meetup to talk more over beers and snacks. It’s an all around fun crowd.

As a Red Sox fan, it is very hard for me to say nice things about New York City but the tech community in New York is definitely one of its strengths. Having a lot of smart people and a passionate organizers like Matt and Haris has made the New York Ruby Meetup very successful in building a community and making it worth the effort for me to make a 3 hour round trip just to hang out and geek out with these guys.

I am very thankful for this group to have started me down the path of learning Ruby by rubbing elbows with more experienced professionals and even though my technical expertise are still at the beginner level, the introduction to the community aspect of Ruby and the injection of passion that this meetup has given me is something I will forever be grateful for.

So if you are in the NYC area and are interested in Ruby, no matter your experience level, I highly recommend that you check this meetup out. If you are a beginner who is interested in learning more Ruby by doing, you should check out a sister meetup called Unearth Ruby. It’s a meetup for programmers that want to learn Ruby by working on problems found in the ruby quiz, project euler etc. We are trying to find venues for Unearth so if you are a company that can serve as a weekend venue for Unearth, please let me know in the comments section.

What keeps me going when the going gets tough

I recently gave an example of why I think my parents did a good job of raising me. However, their impact on my life goes well beyond that. What I am today and where I am today is because of the sacrifices that they have made and for that I am forever thankful.

I grew up like any normal kid with obsession with cartoons, action figures (He-Man was pretty big back then in Nepal) and playing with the neighborhood kids. Despite having a modest income, my parents always made sure that me and my brother got what we wanted as long as it was reasonable. We weren’t always reasonable so having that restriction taught us that when you can’t have everything you want, you learn to focus on what you need - an important lesson that has helped me a lot throughout my life.

But you already knew they were smart so I will focus on the part about toughening it out. I was not necessarily a tough kid. A little scolding from my parents was enough to get me teary eyed. So when I came to the United States in 2002, I was clearly concerned how I will be able to handle the pressures of academics, making friends in a new environment, having to figure out how to manage finances & making enough money through on campus jobs to pay for my own education. For someone with a childhood shielded from most of the tougher realities of life, this was a pretty tall order.

When I look back though, there are two things that clearly have helped me in times when I most doubted my ability to make it through the immediate crisis I was faced with. The first thing that I remembered was what my dad had told me in the car about a week before I was scheduled to leave for the US. I still remember the moment clearly, his expression proud of what I had done up to that point but also aware of what challenges laid ahead me. “Son, the only kind of man worth being in this world in a self-made man.”

Boom! I still feel the power and wisdom in those words and they continue to fill in me a sense of determination to face any kind of challenge ahead of me and see it through. They weren’t empty words either because my dad was exactly that, a self-made man. Whatever we had growing up was a result of his hard work and my mom’s amazing ability to manage the resources to the fullest but I will talk about them more in detail in separate posts in the future.

The second thing that keeps me going is a picture that we have of my parents in our living room. In this picture, they have a huge smile, the kind of smile that reflects that they are truly happy and content in that moment with each other and with the life that they have. I remember the first moment too when I noticed the picture and vowed to do everything in my power to make sure that I bring them the same kind of joy over and over again. It’s like every son’s dream, to make their parents proud and I think so far I would like to think that I have been able to give them at least one or two such moments.

So there you have it. Those are the two things that I always think of and they always manage to give me the energy, focus and determination to take on any kind of challenges. So even though I am far away physically from them, I can still feel their presence everyday around me, guiding me & encouraging me and that is what keeps me going.

Here is to you Mom and Dad!

On choice, consequences & how my parents rock at parenting

One of the many things that I appreciate about my parents has been one of the most important lessons I have learnt in my twenty-eight years of existence. The lesson was that when you are given the freedom to make a choice, you need to understand that you are responsible for the consequences. With that little bit of wisdom, they let me make my choices (with certain restrictions).

I did not begin to understand how valuable this was until I was 19 and a few months from coming to the US for my undergraduate degree. It was then, at a party at a relative’s house, the moment arrived for me and my dad to have a father and son moment: my first drink with the old man. I was not naive and this was not my first drink and something tells me that my parents were well aware of it.

It was not so much the moment though but the realization afterwards that made me aware that now I have been given the freedom of making a choice to drink in front of my parents. With that choice, now it is my responsibility to make sure that I do not lose the trust that they had in me to give me that freedom. Granted I was not too crazy with booze, after being given that choice, I found that I was more responsible with alcohol.

Unfortunately, my college did not have the same faith in me and other 600 hundred or so students that were of age to drink. It was a dry campus and I am sure the people who made that decision thought that this would help students not be distracted and focus on their education but they were sadly mistaken. It clearly did not help me because since alcohol was prohibited, whenever there was any around, people would try and drink as fast as they can so they don’t get caught. Clearly not a responsible behavior.

I was not smart enough to understand it then but now I see that where my parents got it right and the school did not was in terms of ownership of the choice. In the case with my parents, they made me own my choice and made it very clear that I was responsible for the consequences of my actions. By making the choice for me and my friends, the school however took the ownership and indirectly (and most likely unintentionally) sent the message to everyone that we are no longer responsible for any consequences of that choice. If anything, it’s the school’s fault.

The message here is clear: Treat people like adults and they will behave as adults but if you treat them like children, they will behave like children. Unfortunately, a lot of people make this mistake. I know I have made similar mistakes myself and probably still am. You can see an example of this in cases of companies where face time is more valuable than your output at work. What companies fail to realize is that when they focus on whether the employee is there between certain hours, they are unintentionally sending the message that your job is to be here between certain hours and not so much as produce awesome work.

Ruby DCamp: One weekend of Pure Awesome

I had the opportunity to attend Ruby DCamp this past summer and I am not exaggerating when I say that the experience I had has made a huge impact on me and how I view myself as a programmer. I had just returned from my first Ruby conference when I found out about a 3 day camp in Virginia with Code Retreat on the first day followed by unconference the other two days. Prior to this, I had only heard about code retreats and I had no idea what an unconference was but since the event was free and driving from Connecticut to Virginia was not something that I considered as an inconvenience, I signed up. Little did I know that I was going to come back inspired (if you doubt this, you can talk to anyone from the New York Ruby Meetup group and they will tell you that Ruby DCamp inspired everyone)

The code retreat portion was super fun as we worked on Conway’s Game of Life multiple times, each time with a new partner. It was great to pair program with different people because everyone brought their unique style to the table. It was great to approach the same problem from different angles between focusing on the board once to focusing purely on the rule engine the next. It was so amazing that another member of New York Ruby Meetup and I decided to start a meetup dedicated to beginning rubyists to learn by pair programming and using TDD. While we have been struggling to get space for regular gathering, we’ve had one meetup and have a good level of interest.

Having never been to an unconference, I had no idea what to expect the coming days were going to bring. Summary was that I had my mind blown. I actually “led” a talk on code reading (knowing nothing about it myself but wanting to find more about techniques from other knowledgeable people in the crowd). It was great because the talk evolved to a higher level discussion about coding practices. My mind was blown and not just by what was discussed but by the power and flexibility that unconference gave to everyone to guide the discussion and organically turn into something more awesome.

There were so many great talks but Trevor is much better at taking notes than I am. HI TREVOR! He gave a talk on how to take awesome notes but sadly there was no one to take notes for him (at least no one that I know of). Huge kudos goes to Evan Light who organizes Ruby DCamp every year and inspires so many rubyists on a daily basis. I can also say that he has this amazing superpower of remembering people’s name very quickly. There were about 50-70 of us at the camp and he had no problem remembering people’s name. THAT IS IMPRESSIVE! He also is a go to guy for some good scotch recommendations!

Outside of code retreat and unconference, it was awesome to hang out with rubyists and learn from everyone. If you are a n00b, then you should DEFINITELY go if you can because the sheer amount of knowledge and ideas shared during those three days is unbelievable. Follow ruby_dcamp if you want to stay in the loop for when registrations open up next summer.

And there you have it, my post on Ruby DCamp three months after attending. At this rate, you can expect a post on my experience with Ruby Mendicant University (RMU) in early January :).