+
Skip to content

fmaste/fmaste

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 

Repository files navigation

Federico Mastellone

Education

B.S. in Computer Science Engineering, ITBA

Summary

I have worked in Java projects with the usual Hibernate/Struts frameworks and used all the object oriented patterns you can imagine, mostly when trying to make sense of big spaghetti PHP codebases. In the end I got tired of trying to make everything fit into objects and switched to functional programming to never look back! I have been following agile practices for many years, on-site or remotely with companies from different regions, and while I am a Scrum Alliance Certified Scrum Developer, this certification was pursued more out of industry expectation rather than a strict adherence to all Scrum principles.

Haskell

But mostly, I have been a silent participant of the Haskell community for more than 10 years. I made contributions to Haskell's Cabal package manager when I needed for a private project and read the most significant papers and books, from "A History of Haskell: Being Lazy with Class" to "Parallel and Concurrent Programming in Haskell"

My Development Philosophy

“Premature optimization is the root of all evil”

Donald Knuth.

  • Simplicity & Minimalism: Prioritizing straightforward solutions and avoiding unnecessary complexity or over-engineering. I strive for minimal dependencies to ensure long-term stability and ease of maintenance.

  • Early Feedback & Continuous Integration: If you're going to break something you better break it early, committing and merging often is a good practice and when an error is found it's complemented very well with git-bisect.

  • Rigorous Testing: But to find errors you need proper testing, "Program testing can be used to show the presence of bugs, but never to show their absence!". So in addition to defining the base cases by induction with HUnit, I use QuickCheck and Hedgehog, that coupled GitHub Actions are your best friends. Evolving code without testing is dangerous!

  • Continuous Refactoring: The best way to evolve the code or understand legacy code is refactoring it, making small steps until it gets easier to understand and fix errors. When extracting, renaming, refactoring in general I follow the steps detailed in Martin Fowler's book Refactoring. Although it's mostly object oriented the methodology can still be applied to functional programming (The downside of doing small / atomic commits is that you have to remember to merge squash to keep the log uncluttered).

  • Code Readability & Standardization: Having code that looks nice and everybody can understand is important. Style guidelines can vary from company to company and get in the way of elegant solutions (and generate a lot of bikeshedding) but I always try to be as standard as possible and use as few dependencies as possible (back to "don’t overbuild" mentioned at the begining).

External

Linkedin: https://www.linkedin.com/in/fmaste/

About

Config files for my GitHub profile.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
点击 这是indexloc提供的php浏览器服务,不要输入任何密码和下载