HNHacker News
TopNewBestAskShowJobs

dukerutledge

201 karma · joined September 11, 2013

submissionscomments
dukerutledge··on Haskell in Production
> all in all i think it requires a lot of discipline that can easily break down, whereas some of the popular imperative languages you can still sort of plug along (=> punt the technical debt) despite that.

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.

dukerutledge··on Haskell in Production
This is pretty sound advice for any language. You always want most of your code to be dumb. You save high abstraction for things that have a sensible interface and are common enough to need DRYing. Haskell has a higher abstraction ceiling than most languages and there is less trodden ground, so there may be more opportunity to get lost down the rabbit hole. However Haskell2010 is a beautifully simple language that can solve all your problems (maybe with a bit more code than enabling 20 extensions will afford you).
dukerutledge··on Dueling Rhetoric of Clojure and Haskell
I'm speaking about a philosophical dual.

For example: http://www.taoism.net/ttc/chapters/chap02.htm

dukerutledge··on Dueling Rhetoric of Clojure and Haskell
I'd gladly storm into the breach with you :)

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.

dukerutledge··on Dueling Rhetoric of Clojure and Haskell
There are a number of row type libraries and a proposed extension: https://ghc.haskell.org/trac/ghc/wiki/Plugins/TypeChecker/Ro...
dukerutledge··on Category Theory for Programmers (2014)
Probably a similar question, but headed in the other direction "Why should I learn assembly?" You probably shouldn't. But in the process of learning it you might gain a greater understanding and intuition for how and why things work.
dukerutledge··on Three Months of Go, from a Haskeller’s perspective (2016)
I'd disagree. Most business logic is just transformation of data structures in disguise. Once you have a sufficiently rich set of data structures this becomes abundantly clear.
dukerutledge··on Why recursive data structures?
Reginald is definitely hinting at hylomorphisms here. I'd be curious to see if stream fusion could be achieved in JS for a hylomorphism.
dukerutledge··on Why I’m thankful for JavaScript fatigue
Who works for an organization that changes their infrastructure every week? That business doesn't exist. That business already failed.
dukerutledge··on Show HN: A fork of sudo with Touch ID support
If you are asking the question, should I use this?

"I am not a security expert."

No.

dukerutledge··on The traits of a proficient programmer
Some of these remind me of Ed Kmett's YOW talk: "Stop Treading Water: Learning to Learn"

https://yow.eventer.com/yow-2014-1222/stop-treading-water-le...

dukerutledge··on The cost of small modules
Now lets see some charts about build times.
dukerutledge··on Frp: A fast reverse proxy to help you expose a local server to the internet
Well, this will confuse the meaning of FRP even more. Poor Conal...
dukerutledge··on Zero-cost futures in Rust
Yeah, since rust is eager existential types seem like a necessary evil.
dukerutledge··on Zero-cost futures in Rust
So, existentially quantified types?
dukerutledge··on The Future of Standard ML (2013) [pdf]
Totally agree. There was a great example on /r/haskell the other day.

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.

dukerutledge··on Ask HN: Who is hiring? (June 2016)
skedge.me - Senior Software Engineer – Backend

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 jobs@skedge.me to apply.
dukerutledge··on New Adventures for Elm
In frontend? Not 100%, but pretty much.
dukerutledge··on Is Sound Gradual Typing Dead? [pdf]
A modern static type system allows this style of programming.
dukerutledge··on FuckAdBlock
How about a business plan other than mine my users' info and sell them ads?
dukerutledge··on Ask HN: Who is hiring? (September 2015)
http://skedge.info/careers/

skedge.me founded in 2010, is the leading enterprise specific customer engagement platform for scheduling and marketing in-store events and services used by Sephora and other well know retailers. The product integrates with existing websites, and allows customers, as well as associates, the ability to make individual personalized appointments and/or sign up for exclusive events or classes from any mobile, tablet or desktop device.We are a rapidly expanding company that offers a great, fast paced but casual work environment and a ton of professional ownership and growth opportunities. We are poised to become the market leader as enterprise online scheduling becomes the norm, and are looking to expand our team with the following positions:

- Back-end Developer (Haskell)

- Senior Software Engineer – Backend (Haskell)

- Senior Software Engineer – Front End

- Senior Software Engineer – Site Reliability

dukerutledge··on State of the Haskell ecosystem
Really? Deployment has always been a breeze for me. Build on a vm, scp the binary up to my server, profit.
dukerutledge··on Ember.js 2.0 Released
Wow, I like the feature selector. That page has gotten snarkier since I last looked.
dukerutledge··on Relay Technical Preview
"Being abstract is something profoundly different from being vague … The purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely precise." -Dikstra

When you overload an existing term you make it more vague, thus destroying the precision of an abstraction.

dukerutledge··on Processing documents with Clojure transducers
Transducers seem really nice, but wouldn't they be unnecessary in a language that could optimize list (etc) fusion?
dukerutledge··on Why do buses bunch?
This kills the firefox.
dukerutledge··on Deku: How we built our functional alternative to React
Meh, I'd rather work with objects that enforce immutability and model monadic sequencing than this sea of continuation passing.
dukerutledge··on How to Write a Rust Syntax Extension
Haskell has it
dukerutledge··on Reconsidering Functional Programming
This is why we call these things "values" not "variables"
dukerutledge··on Elixir vs. Erlang: a question of momentum
SPJ is certainly a bodhisattva.
Page 1 of 2Next →