dukerutledge
Ask HN: How many code reviewers should you require?
Tagged Is Not a Newtype
Interestingly I have the exact opposite perspective. Writing imperative or OOP code requires me to be excessively disciplined. It is extremely easy to build un-maintainable spaghetti. There is a whole cottage industry of methods for your discipline of choice: Clean, SOLID, TDD, etc. All these disciplines seem to boil down to the same systemic result, push effects to the edges of you program so you can more easily test, evolve and maintain. Functional programming (of the typed variety) tends to allow me to write garbage code, that is testable and can be easily evolved and maintained because the paradigm encourages me to be a good actor.
I've refactored production code in imperative languages and typed functional languages and only one of them allowed me to make HUGE sweeping changes with ease and high confidence.
Ts of Industrial Haskell
A Home for Orphan Instances
Compact Regions: Success, Failure, and Questions
For example: http://www.taoism.net/ttc/chapters/chap02.htm
Hopefully we all agree that static types and dynamic types are useful. Those who use hyperbole are attempting some form of splitting. I think the point where we disagree is what the default should be. The truth is this discussion will rage on into oblivion because dynamic types and static types form a duality. One cannot exist without the other and they will forever be entangled in conflict.
Dueling Rhetoric of Clojure and Haskell
A Tale of Two Monads: Free vs. MTL
Beautiful Aggregations with Haskell
Haskell, Can We REST? JSON and Message Pack
"I am not a security expert."
No.
https://yow.eventer.com/yow-2014-1222/stop-treading-water-le...
https://www.reddit.com/r/haskell/comments/4sdkch/haskel_newb...
Operators are certainly overused in Haskell, but sometimes they make something so much more readable.
Role
We are looking for an experienced systems engineer to design and implement deployment automation, automatic failover, reliable backup/restoration, and scalable data storage strategies that can be distributed globally.
Our technology stack is based on Haskell, Postgres, NixOS, and we deploy to AWS with NixOps. Our ideal candidate is well versed in all these technologies, but most importantly has experience managing, scaling and monitoring high performance web services with any stack.
Additionally, we desire candidates with continuous deployment/delivery experience. Candidates should be familiar with being part of an on-call rotation, and developing a runbook. We rely on our continuous integration server to build, run tests, and provide binary caches of compiled assets to accelerate compilation. We automate anything we can. We know the value of a two line shell script and a one step build.
A typical week might include
Designing a strategy for horizontally sharing our database. Implementing graceful server shutdown on runaway memory consumption. Adding real-time metrics hooks to key areas in the code base, and adding alerts to our monitoring system. Developing an offline database jobs system, for zero downtime migration. Redesigning existing APIs to common industry practices (HATEOAS, cacheable urls, etc.). Profiling slow requests and implementing improvements. Addressing production issues from our existing clients. Fixing bugs and adding tests to our automated suite.
Qualifications
Professional Haskell experience is desired but not required. Haskell expertise is required.
BA/BS in Computer Science, related technical field or equivalent practical experience.
Minimum 4 years experience writing scalable, reliable software.
Email [email protected] to apply.