Embracing Dot Net and F#

Posted by Alan Barr on Sun 07 January 2018

Hesitant to embrace a new stack

My background in software development originally started with working for marketing companies. For the most part the technology under the hood had to be inexpensive and scalable so that the business could accomodate the needs of the companies that we would support. I grew and learned using a lot of linux, PHP, JavaScript, and MySQL. Not for any particular reason but there were the tools in place to be used and we were there to get our jobs done. Over the past couple years I have had a lot of fun working with JavaScript and its growing ecosystem. It was hard to see the faults that JavaScript had though I was aware that things were hard but doing anything felt very fun!

Transitioning

I am an extremely open and adaptable person and I am willing to give anything a try at least once. I was hesitant to join a .Net shop. Or even a statically compiled language shop. I toyed with some of the systems and I was very comfortable using imperative programming and objects when I needed them. In general I struggled to understand why I needed to really use an object in my language. However, to move my career on I was willing to learn whatever I needed to be successful in my next position. When I joined the Veterans United Home Loans software development team the culture of the company helped me to adapt to the shift in tech stack. After some time working in this stack I grew to learn most of the problems, challenges, and strengths of the platform were not much different than in the onprem linux or cloud based linux environment that I was accustomed to.

Mastering

Over time I began to understand the benefits of a statically compiled language and type safety. Looking back on much of the PHP and JavaScript I had written I realized I was missing many of the guarantees these systems offered. As well as the strong testing mindset that VUHL instills in its developers. I was aware that this strong testing mindset existed in industry but it was great to increase my knowledge of the different levels of software testing.

Growth

Since being exposed to languages such as C# and Java I struggled to understand the benefit of Object Oriented Programming. Why is everything a class? This frustrated me for a long time. What were all these design patterns that people seemed to know. What's the deal with dependency injection. I had been learning more and more about functional programming since I learned JavaScript and I looked at some functional languages but most were very academic. I am a pragmatist at heart and would rather work on tools I can apply now. I embraced the concepts and knowledge of functional programming and decided that minimizing where state gets changed would help me be a better developer. I always want to share my knowledge of tools, practices, and processes that could help others be better at their craft. The ideas behind functional programming truly power better development practices.

A New Language

While poking around in Visual Studio one day I saw this F# language. I must have read about it by accident one day but never had a reason to use it or explore it. One day I decided to create a project and toy around with it. The syntax was much different than I expected. I could make something simple but the types confused me. I put it aside for a while until I could come back to it. I kept being drawn back my original functional programming knowledge was limited to map, filter, reduce in JavaScript. I kept coming back and this language drew me in. Here sitting to the side is this amazing production level functional language ready to be used by a business. I had explored Elixir and other languages but the chances of me being able to use it in my day job were slim to none.

F# is amazing for a pragmatist. Types are inferred! I always struggled to understand, why do I need to be so explicit about the types of everything? Isn't this just so much to type all the time? It's just baked in. F# is multi paradigm, if you need objects bam you have them, functional sure, imperative why not? While I do not have any F# in production yet I am very happy with where F# is going and where it fits in the overall ecosystem. MS is going full steam opensource and crossplatform. The FSharp Foundation is an excellent warm and welcoming community.

What excites me most about sharing F# is that the barrier to entry for a full on functional programming language is very low. Looking at software from a lens of quality we can learn a lot from functional programming in how our applications are architected to avoid errors related to state.

I will be presenting an F# Demo to my group of Software Developers at Veterans United Home Loans.

If you're interested in Veterans United Home Loans check us out here