Youth in Agile is a new blog series sponsored by SolutionsIQ that gives young Agilists a voice in a world that is constantly changing and asking increasingly more of them. The contributors to this series are college-aged individuals who are part of the SolutionsIQ community — interns, participants of a certification course, family to SolutionsIQ’s core community. As Agile becomes more and more mainstream, it’s imperative that we begin listening to the next generation of Agilists who have hopefully learned from us and our mistakes and can continue down the path of growth in the work place that this generation and previous ones have carefully laid out.
This blog was written by Conner Mattingly, a Computer Science major at Washington State University in Pullman, WA.
Higher Learning vs. the Real World
The real world. That’s what I hear college kids say when they are referring to life outside of school. A life that involves a career and more responsibility as they move out on their own. I would hear this “real world” phrase a lot and it was always kind of funny and lighthearted, but this summer when I began an internship at SolutionsIQ the phrase gained a bit more weight for me. Since starting my internship, I have had the opportunity to experience the professional world a little every day. Now I have an increased understanding that college is, in a lot of ways, very different from the “real world”, or at least in this case, the professional world.
Learning in College
In college, the work is more spread out. Instead of dedicating 40 or so hours a week to being as productive as possible at work, in school you’re expected to do as much work as is required to get the task done. The “products” that you deliver in college are much smaller than you might have to deliver at a job as well. However, school deadlines are much closer together. If you’re a developer, these environmental differences can lead to very different styles of programming, including acquiring bad habits. In my experience, college code is slapped together without much emphasis on the overall structure of the software. An analogy is that of constructing a house and then punching holes in the walls so you can get pipes and electrical wires to where they need to go — an ugly sight. The wires get tangled, the pipes leak, and half of the pipes and wires lead into rooms where they aren’t needed. The house is a mess but somehow the sinks work and you have overhead lighting. That’s what the majority of code in college is like. Lack of experience is definitely largely to blame for this but I feel that professors in most classes don’t place emphasis where it should be. Especially since college is meant to prepare you for the “real world” — or at least that’s what I thought.
Even after a short exposure to working in a software development environment, it seems to me that my Computer Science department is definitely behind the professional world. There are only a few tracks you can take and yet in the professional world there is a vast variety of disciplines to pursue that are all beneath the umbrella of Software Development. However, I have seen the start of a shift in college in how programming classes are made available. This year I was told that in fall semester of 2016, the college that I’m attending, the Voiland College of Engineering and Architecture, is offering a Software Engineering degree in addition to the Computer Science degree. This is huge. Computer Science at my school seems to emphasize — well, the science of computers so much that I feel like we’re only learning about the lowest level languages. I’m am not angry about any of the knowledge that I have gained because it is knowledge after all. But I am very excited about the Software Engineering program; it’s a step in the right direction to help students prepare themselves for a career in software development. I just hope they keep moving in the right direction.
Interning in the “Real World”
I think the main disconnect between my school experience and my interning experience is the topics and skills that are emphasized. In actual software development, as I said, you have to think about the structure of the code. Since code bases are so large, if you don’t structure your code well, you could end up writing such tangled code that you never get the project done. This can cost companies millions of dollars, which means you could even lose your job. In college it just results in a bad grade. That’s probably part of the reason not much emphasis is put on code structure. But even if it’s not costing a customer money, focusing on the overall structure of the code will make any developer’s life easier and result in a better product. Since code quality and organization is hugely important in professional development, there are processes that exist to aid developers in their coding endeavors. One of these methods is Agile, which I have learned a lot about while at SolutionsIQ.
Agile is a way to develop software that lets teams create products fast and efficiently. Paired with Lean and Extreme Programming practices, the path of product development becomes clearer with every step taken toward the end goal. Software development, by nature, is very flexible and adaptive. Therefore the flexible nature of Agile principles lead to a perfect coupling of process and execution. Seeing Agile and other practices used in unison this summer blew me away. When the programmers stayed true to their principles, like collaboration and rapid feedback, development was simple and clean. I learned about test-driven development (TDD), refactoring, pair programming and so much more. It was amazing to watch. Yet this beautiful way of developing a product was covered for less than an hour one day in one of my classes this last year. That doesn’t make sense since it seems like Agile development and management leads to better production. I only have one more year of classes left and I am uncertain if I’ll hear any more of Agile while attending them, but I hope I do.
The greatest thing about my internship has been my hands-on experience pairing with James Rosko. James is a very experienced and methodical software engineer who seems to write code with the same ease that others might draw a simple flowchart. Seeing him at work was an experience all in itself. While we were pairing, we developed the foundation for the MVC app we were planning to create. We set up the server, the database and a template for the client. What made the biggest impact on me during this process, which is quite common in development, was how James would work through any given problem. I don’t think I’ve seen anyone who could slow down and break problems down into their individual components as effectively as he did. His ability to make a problem smaller is a skill I hope to possess one day. The importance of this kind of skill is, in my opinion, one of the most important to have as a developer. Yet in school these skills are not always focused on, perhaps because of the environment. This is disappointing to me because I think that skills like these are far more important than some of the things that I have learned in school, even outside of software development. Not only do they allow for more effective problem solving, but these skills allow for an increase in learning efficiency. There are so many valuable skills that are required for, or are at least useful for, the “real world” that college, in my experience, doesn’t develop. Therefore, I think it would be beneficial for young people just starting their development careers to have access to some sort of long-term internship program where they could get the experience needed to develop professional-grade software.
In conclusion, I’m happy with the opportunity I’ve had to learn so much about software development and working in teams from professionals like James and others at SolutionsIQ. It has really changed my perspective on the “real world”. I enjoy my school work as well, but I hope that in the future there will be more programs dedicated to helping beginners like me cultivate the skills and acquire the knowledge needed to succeed in the world today.