Talks

Learning To Program Using Ruby

Learning To Program Using Ruby

by Marion Schleifer

Marion Schleifer, known as Ruby Dwarf, presents her experiences and insights into learning programming with Ruby in her talk at RubyDay 2016. She discusses her journey from having degrees in translation and business administration to becoming a junior software developer at Simplification. Her narrative emphasizes the struggles of self-learning programming, particularly how beginners face challenges that experienced programmers may overlook.

Key Points Discussed:

- Learning Journey: Marion describes her motivation to learn programming, sparked during a vacation when she asked her boyfriend for tutorial resources. She highlights the initial success with online materials but also the pitfalls of self-study, including motivation issues and lack of practical context.

- Internship Experience: She sought an internship at Simplification despite the lack of open positions and successfully landed one by directly contacting the CEO. The supportive environment helped her learn fundamental programming concepts and gain confidence.

- Common Programming Challenges: Marion shares her struggles with understanding concepts such as object-oriented programming (classes vs. objects), loops, and recursion. For instance, she didn't grasp recursion until she had to implement it for a project, indicating how crucial hands-on experience is for beginners.

- Teaching and Community Engagement: Noticing the lack of women in programming at Simplification, she helped establish a free programming course for women called Ruby Monsters. This course allows women to learn programming at their own pace, fostering an inclusive environment.

- Ruby as a First Language: Marion champions Ruby for its beginner-friendly syntax and wealth of online resources. She notes that while it promotes freedom, this can lead to confusion without understanding language conventions. The engaging learning experience with Ruby can motivate newcomers to continue programming.

- Encouraging Women in Programming: She discusses societal biases against women in tech and the importance of representation. By sharing her experiences and promoting programs like Ruby Monsters, she hopes to inspire more women to pursue programming careers.

Concluding Thoughts: Marion emphasizes that anyone can become a programmer with dedication and hard work. Her journey reflects the importance of support, education, and community engagement in overcoming barriers to entry in programming, particularly for women. She strongly advocates for Ruby as an accessible starting point for aspiring coders and highlights the need for misinformation to be addressed to attract more diverse talents into the field.

00:00:11.980 Thank you very much for joining me in my talk. As she said, I'm Marion, also known as Ruby Dwarf for obvious reasons, and I'm working for Simplification as a developer. The reason I'm here is that I taught myself to program with Ruby and now I am teaching others to do the same. Many people here helped me with my learning journey, and I realize that sometimes, for very experienced programmers, it can be hard to understand beginners' problems because it feels so natural to them. So, if you ever work with interns or junior developers, this talk might have some interesting insights for you. Additionally, I will have a short section at the end about women in programming because I think it is an important topic that is not addressed enough.
00:01:02.629 First, I want to tell you about how I came to be a programmer. It was roughly a one-and-a-half-year journey, filled with moments of astonishing amazement at what I could do with programming, but also frustrations when things just didn’t work. My previous education includes a bachelor's degree in translation and a master’s in business administration. At that point, I had already worked at two big companies—Fever and Swissport—and I knew I didn’t want to be in a company where I was just a number, doing repetitive work. So, I quit my job, completed my master’s, and asked myself what to do next.
00:01:58.310 Many of my classmates went to work in banks and insurances, which was not what I wanted. Instead, I sought an interesting job where I would learn new things daily and work with interesting people. I appreciated good working conditions, like paid leave and flexible hours. At that time, I had been with my boyfriend for several years, and he was a programmer ever since I had known him. Until then, I had never shown any interest in learning programming myself, but I found myself desperate for a challenge. While we were in the Philippines, I asked him for some online tutorials. I woke up at six o'clock for three mornings in a row and completed those tutorials. By the end of our holiday, I had decided to become a programmer.
00:02:44.860 Initially, I tried self-study. I took a 50-percent job as an accountant to cover my living expenses, while I dedicated the rest of my time to online tutorials. At first, this approach was very successful because I learned a lot in a short period. There are many good online resources available, but there were also drawbacks. For example, motivation became an issue; being home alone made it too easy to eat ice cream instead of working on programming problems. Additionally, I lacked a practical context. At some point, I learned all the methods related to strings, but I had no idea where to apply them in practice and had never written a complete program by myself.
00:03:10.390 So, I approached Simplification, which I had already identified as my preferred company to work for before starting my self-study, and asked about an internship. They informed me that they did not have any internships available. I accepted that but really wanted to work there, so I sent an email directly to the boss requesting an internship. Luckily, he agreed to meet with me the next week, and I could start my internship the following week. This was a pivotal moment for me because I could work in a productive atmosphere. My colleagues were supportive and always happy to answer my questions; they even stopped by occasionally to check on my progress.
00:04:24.210 During my internship, I listened to the discussions my colleagues had during breaks, and at first, I didn't understand anything. It was both challenging and enlightening. While I wanted the challenge, I quickly realized that not all discussions focused on Ruby. I realized I needed some serious foundational knowledge, so I decided to pursue a Master of Advanced Studies in Software Engineering where I would learn about operating systems, databases, and other programming languages.
00:05:01.680 During my internship, I noticed the absence of female programmers in our company; I was the only one and I wasn’t even a real programmer—just an intern. I talked to some colleagues about this, and one of them decided to start a free programming course for women called Ruby Monsters. I helped him set it up, and it has been running for a year and a half, allowing women to learn programming without any commitment. They can drop in to see if they like it and leave without obligation. I’ve been teaching this course every Monday night, and the participants have some amazing stories. For example, one lady has a five-year-old daughter interested in programming but struggled to learn it by herself since all the tutorials were in English.
00:05:58.400 So, she attends our course to learn in order to help her daughter later. We also have participants from IT companies who want to understand what goes on behind the scenes. As of September this year, I am now a junior software developer at Simplification. I perform similar tasks as my colleagues who are working on projects, but sometimes it takes me a bit longer to grasp certain concepts, as there are things I haven’t learned yet. We develop online websites and platforms for clients. Now, let's discuss some challenges faced by beginners.
00:07:11.870 These were my challenges, but I also realized that the people I teach face similar obstacles. I recognized that many programmers take fundamental programming concepts for granted because they have been immersed in the field for so long. For beginners, these concepts aren’t intuitive at all. Let's explore a few of these concepts together.
00:08:02.600 The first concept is the difference between classes and objects. Initially, I didn’t understand this distinction. People would often say, "an object is an instance of a class," which I understood but couldn't grasp its significance. Then, my mentor during the internship explained it in a way that clicked for me: he compared a class to a blueprint for a house, where the house itself is the object. That perspective made the difference clear for me.
00:08:59.740 The next concept was loops. When I mentioned to a colleague that loops were difficult for me at first, he couldn't understand because he found them so natural. Now, I also find it easy, but when you can't even visualize what an array or a hash is, learning to iterate over them can be quite challenging. After self-study, I thought I understood loops, but I later realized I didn’t fully grasp the concept, and needed to apply myself in practice to make it click.
00:09:57.680 Recursion was the hardest concept for me. I felt accomplished when I figured out how to handle things iteratively but later discovered I was still missing something. Once, I created a program that was running slowly, and someone advised me to implement it recursively. Learning recursion took a while, and even now, I still try to practice it to become more comfortable with it, as it’s an important concept for performance. It’s crucial for juniors and beginners to learn about recursion, as they will encounter it in real-world applications.
00:11:14.820 I have a specific example of a challenge I faced. My internship mentor assigned me the task of writing a class that sorts an array. I was proud of my accomplishment until I showed it to him, and he exclaimed, "What on earth did you do?" This brings me to some pitfalls of learning Ruby as a first programming language. The freedom that Ruby offers can lead to confusion if you aren’t aware of the conventions and rules of the language.
00:12:26.740 I soon realized that every programmer has strong opinions about everything. Discussions can range from ‘MiniTest versus RSpec’ to ‘rebase versus merge in git.’ At first, it was challenging because I would listen to these debates without knowing who was right. I tried to pinpoint people's educational backgrounds to understand their perspectives, but that didn’t work either. One specific example was about which monitor to use. I mentioned the RubyMine IDE, but a colleague argued that you didn’t need it because Ruby would work just fine without it.
00:13:23.490 Another example occurred while programming a vending machine that needed to track statistics. I worked with a colleague who said we only required one instance of this class, so we should make it a singleton. I showed it to another colleague later, and he stated that his rule was to never use singletons. We used it anyway, and when it came time for testing, I tried to test the singleton and discovered that my test was manipulating that class state. I then researched testing singletons, which violated their fundamental principles, and decided to avoid using them.
00:14:10.660 This experience taught me that I needed to quickly build my own opinions, even if that opinion changed later. In the beginning, I hesitated to share my views since I didn’t feel knowledgeable enough. However, it became easier once I developed my opinions. Reading books also helped significantly. Whenever I encountered a concept I couldn’t grasp or didn’t know how to form an opinion, I would turn to literature, like ‘The Pragmatic Programmer’ or ‘Clean Code.’ For the singleton example, I read ‘Head First Design Patterns,’ which aided in forming opinions.
00:15:08.390 Now, let's discuss Ruby as a first programming language. There are many advantages. For instance, I like the syntax, which is beginner-friendly and easy to read—it doesn’t seem intimidating because it lacks many complex mathematical symbols. When I read a method, it flows like a sentence, which is encouraging for newcomers. Additionally, there is a wealth of good online material available. For example, I tried platform such as Code School and Ruby Monk, which focus on assertions, helping to lay a foundation for understanding testing.
00:16:49.210 Overall, I believe you can achieve a lot through online tutorials alone. In Ruby, programmers are also given a sense of responsibility because, unlike in strongly typed languages like Java where you must declare parameter types, Ruby holds the programmer accountable. In Ruby, you decide what to pass, and while that can lead to mistakes, it encourages you to think critically about your code.
00:17:44.590 Most importantly, Ruby enables people from non-technical backgrounds to experience quick success. Writing a simple ‘Hello, World!’ program is straightforward—you can easily create a file, save it, and run it in the console. This immediacy can be very motivating. In contrast, programming in Java involves a steeper learning curve just to produce simple output.
00:18:22.220 However, there are drawbacks to using Ruby as a first language. One issue is the freedom it allows, as seen in my earlier example where I overrode the array class, leading to potentially dangerous situations. Additionally, learning Ruby might not provide exposure to typed languages, which could make future transitions more challenging. On the flip side, learning programming through an easier language initially allows one to stabilize foundational concepts before tackling more complex languages.
00:19:10.590 Another challenge is that syntactic sugar in Ruby can sometimes mask understanding important principles. For instance, if you become accustomed to using `attr_accessor` without ever writing your own getter or setter, you might not comprehend what it actually does. Overall, I would strongly recommend Ruby as a first programming language because it allows for quick accomplishments and boosts confidence, encouraging newcomers despite the steep learning curve.
00:20:25.840 It is essential, however, to learn additional programming languages later on to gain broader knowledge about types and concepts. Understanding other languages will also facilitate a deeper comprehension of Ruby, as differences will highlight features you may not have considered before.
00:21:01.390 Now, let us address the last part of my talk. I believe there aren’t enough women in programming. I often ponder the reasons behind this. One significant factor is the reputation of the job. I recall a story while dining with a middle-aged Australian couple in France. When I mentioned I was a programmer, one man was skeptical and remarked that I didn’t look like a programmer at all.
00:21:57.180 This response highlighted a societal perception that can deter women from pursuing programming, especially if they lack personal connections to the field. Another reason is that many women experience self-doubt and believe they need to be exceptionally intelligent to succeed in programming. I used to think that way, but I’ve come to realize that anyone can learn programming with effort and determination.
00:22:32.590 Furthermore, there have been talented women in programming history who were overlooked for their contributions. A prime example is the ENIAC programmers, who were responsible for programming one of the first electronic computers after World War II. They did this crucial work without programming languages, manuals, or tutorials, yet this fact was largely ignored until 2013. It is essential that we acknowledge these contributions to empower future generations of women in technology.
00:23:19.500 Statistics have shown that companies with diverse teams produce better results, as diverse backgrounds lead to an increase in quantity and quality of ideas. This suggests that creating a balanced workspace is preferable. However, to achieve this balance, education about programming is essential. It is important that potential programmers not dismiss the field without understanding it. I hope to see more role models in programming, especially women, so that they can share their experiences and demonstrate the value of technical professions.
00:24:12.840 I often get asked how long it took me to become a programmer. I reply that it took about a year and a half. Some women express concern about their lack of mathematical skills, as I used to do, but I assure them that it's not a barrier. In fact, one of my best marks in technical subjects was in Data Structures and Algorithms, which required a good grasp of logical reasoning.
00:25:06.740 Many people possess the potential to become excellent developers, but not everyone is afforded the opportunity. This opportunity loss is influenced not just by political or financial limitations, but also by societal attitudes and pressures. Talented individuals could thrive in programming if they were only exposed to it.
00:25:33.320 Offering low-commitment courses can encourage interest among women considering programming. Such classes provide a safe environment to explore and gain familiarity. Additionally, sharing my work with friends fosters understanding of programming. When I demonstrate my code to others, it helps bridge the gap of knowledge.
00:26:06.940 It is essential to communicate these ideas to teachers, who shape the perceptions of children about their own abilities. When children see that they can pursue any profession regardless of gender, it encourages participation in technical fields for all. To conclude, I want to stress that hard work and dedication can lead anyone to achieve their goals in programming.
00:27:04.590 I maintain that Ruby is an excellent first programming language. While you may encounter some syntactic quirks, deeper concepts can be learned later. In my research for this talk, I found opinions that Ruby is not a suitable first language due to its syntactic sugar. However, based on my experiences with C, I firmly believe that Ruby provides a gentler introduction to programming.
00:27:53.320 Moreover, we need to be proactive in getting more women involved in programming. Be it through discussions with friends or showcasing your work, it's essential to promote the possibilities and benefits of learning to code. We should strive to diminish the perception of programming as a male-dominated field and normalize the idea that anyone, regardless of gender, can become a programmer. Thank you for your time.
00:29:12.020 Yes, I've always believed that when I commit to something, I follow through. It's essential to remind others that everyone faces challenges in their learning journey, regardless of gender. I encourage those motivated to pursue programming since companies are looking for passion and commitment. There is one dedicated woman in our Ruby Monsters course, who juggles home-schooling her children while attending class. I’m confident that her hard work will lead her to a programming job eventually.