Jay Fields

blog.jayfields.com · Personal blog · on HN since 2007

Jay Fields, a software developer and consultant, writes about Clojure, Ruby testing, pair programming, technical books and developer productivity.

What HN saysCommenters point to it for Ruby testing posts, Clojure destructuring and thoughts on pair programming and consulting, treating it as a useful practitioner's blog.
52HN people shared it
10linked it in comments
78stories submitted
893story points
4 years agolast shared
2007people per year2026

Most-shared posts

  1. 1
    Clojure's Destructuring
    3 people · 47 points · first shared 2010 · discussion on HN
  2. 2
    The Cost of Net Negative Producing Programmers
    3 people · 21 points · first shared 2009 · 7 comments on HN
  3. 3
    Is Productivity Killing Your Creativity?
    3 people · 8 points · first shared 2012 · discussion on HN
  4. 4
    REPL Driven Development
    3 people · 7 points · first shared 2014 · discussion on HN
  5. 5
    The Case for Buying Technical Books
    2 people · 78 points · first shared 2014 · 52 comments on HN
  6. 6
    Clojure: State Management
    2 people · 11 points · first shared 2011 · discussion on HN
  7. 7
    Thoughts on Developer Testing
    2 people · 9 points · first shared 2009 · 5 comments on HN
  8. 8
    Life After Pair Programming
    2 people · 6 points · first shared 2011 · discussion on HN
  9. 9
    The Single Best Thing For My Career
    2 people · 6 points · first shared 2012 · discussion on HN
  10. 10
    Ruby: Testing Private Methods by 'publicizing' them
    2 people · 4 points · first shared 2007 · discussion on HN
  11. 11
    Clojure: Composing Functions
    2 people · 3 points · first shared 2010 · discussion on HN
  12. 12
    Ruby: Inject (2008)
    2 people · 2 points · first shared 2011 · discussion on HN
  13. 13
    Linux Commands for Developers
    1 people · 98 points · first shared 2012 · 64 comments on HN
  14. 14
    How I Open Source
    1 people · 77 points · first shared 2012 · 10 comments on HN
  15. 15
    Clojure & Java Interop
    1 people · 64 points · first shared 2011 · 14 comments on HN

What HN people wrote when they linked it

twic · 2019-02-18
> What we call technical debt is really best analogous to an uncovered short sale Steve Freeman famously described it as an unhedged call option: https://jaxenter.com/bad-code-isnt-technical-debt-103059.html The key difference between a short position and a call option is that the former is linear, whereas the latter is not: if things let a little bit worse, a short will lose a little bit of money, whereas a call will cost nothing, but if things get a lot worse, a short will lose a lot of money, and a call may lose an enormous amount of money. Someone who actually works at some dodgy trading company argued that some kinds of debt are like options, and some are like debt - and so potentially, some are like shorts: http://blog.jayfields.com/2011/03/types-of-technical-debt.html So now we just need to calculate our technical debt portfolio's delta, beta, vega, theta, rho ...
jaycfields · 2014-08-25
No hate for consultants from me. The opposite, actually: http://blog.jayfields.com/2012/05/single-best-thing-for-my-career.html Consultants should write books, but I believe we'd all benefit if non-consultants wrote books as well.
wastedbrains · 2008-10-21
Jay Fields also has an excellent collection of blog posts on Ruby particularly useful stuff when you are looking into doing better Ruby testing. Some I have found interesting http://blog.jayfields.com/2007/09/rails-how-we-test.html http://blog.jayfields.com/2007/11/ruby-testing-private-methods.html http://blog.jayfields.com/2007/05/ruby-unit-testing-delegations.html http://blog.jayfields.com/2008/01/testing-one-expectation-per-test.htm…
lkrubner · 2014-08-03
This is great, and it is also worth reading "Destructuring in Clojure and Ruby": http://eyeofthesquid.com/blog/2013/09/29/destructing-in-ruby-and-cloju… which has some great comparisons. As it says: "As with many things in Ruby, the better question than “Can it be done this way?” is “Is it wise?”. " There is a lot that you can do in Ruby that is more gracefully done in Clojure. Brian Carper brings this out even more clearly with his post "Keyword Arguments: Ruby, Clojure, Common Lisp": http://briancarper.net/blog/579/keyword-arguments-ruby-clojure-common-… That post shows the exact point where keyword arguments in Ruby can become ambiguous, which is the exact moment that Clojure's clarity becomes obvious. Also, Jay Field's post on the subject of Clojure destructuring is where I got a lot of practical starting ideas (such as using the :keys directive): http://blog.jayfields.com/2010/07/clojure-destructuring.html
johnkchow · 2012-01-10
I have to agree that PP loses value when you have many senior level programmers on the team. The biggest value in PP, in my personal experience, is transfer of knowledge and experience. This applies mostly to teams with huge gaps in experience (juniors vs. seniors) or new team members that need to be caught up to speed with the codebase. If the talent level is the same (and by talent I mean having the innate passion and ability to learn, not having actual knowledge) the knowledge of the collective team members will eventually equalize through the initial PP sessions. Like the author said, the context of the team and the general strategy of the company (i.e. maintaining a project vs developing new features) are the most important signals when determining the programming tactics (i.e. PP and self-learning) to reach those goals. P.S. The link at the bottom of the article (http://blog.jayfields.com/2011/08/life-after-pair-programming.html), provides two great team contexts for when pair programming succeeds and when it fails. Definitely take a read on that.
valbaca · 2022-06-27
Whether to pass in a single dict/object/map/assoc-list or individually separated arguments is a tale as old as LISP (JS has some FP roots if you squint hard enough) and most LISPs (and JS has started doing this as well) mitigates this with destructuring: Common Lisp: https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node252.html Clojure: http://blog.jayfields.com/2010/07/clojure-destructuring.html JS: https://simonsmith.io/destructuring-objects-as-function-parameters-in-…
DanielRibeiro · 2012-01-16
This perception even has a name: Net Negative Producing Programmers[1][2] [1] http://blog.jayfields.com/2009/01/cost-of-net-negative-producing.html [2] http://en.wikipedia.org/wiki/NNPP
JonnieCache · 2011-04-23
Something that I only realised the other day which made me feel kinda embarrassed: in ruby, the reduce method is called inject. For years I've been doing MapReduce functions, without realising it. MapReduce was in my mental pile of "genius things that cleverer people than me do, must be looked into when there is time." For info on inject: http://blog.jayfields.com/2008/03/ruby-inject.html
sh1mmer · 2009-01-06
Vaguely interesting article to me. It's basically a reality check for this: http://blog.jayfields.com/2009/01/cost-of-net-negative-producing.html In short the reasons why you a good programmer can't remove all the "bad programmers" 1. Working out who is good and bad is hard 2. It would involve too much politics that you may not be good at 3. You look like a jerk if you besmirch your co-workers 4. It's easiest for companies to hire based on "years of experience"
yogthos · 2018-10-07
That is pure and utter FUD I'm afraid. My team has been working with Clojure for over 8 years now. We have tons of code in production, and we don't have any problems maintaining these projects. Furthermore, there's absolutely no empirical evidence to support the notion that static typing results in statistically significant reduction in defects, speed of development, or ease of maintenance. Considering how long both disciplines have been around, and the sheer amount of software written in each, that's quite the elephant in the room. I also have no idea who the people migrating from Clojure to OCaml, Haskell, or F# are. I don't think I've seen a single story about a company doing that. My experience is that dynamic typing is problematic in imperative/OO languages. One problem is that the data is mutable, and you pass things around by reference. Even if you knew the shape of the data originally, there's no way to tell whether it's been changed elsewhere via side effects. The other problem is that OO encourages proliferation of types in your code. Keeping track of that quickly gets out of hand. What I find to be of highest importance is the ability to reason about parts of the application in isolation, and types don't provide much help in that regard. When you have shared mutable state, it becomes impossible to track it in your head as application size grows. Knowing the types of the data does not reduce the complexity of understanding how different parts of the application…

Keyboard shortcuts

/Search
j kNext / previous blog
EnterOpen selected blog
vVisit the blog site
fFollow / unfollow
lSwitch grid / list view
dSwitch dark mode
g hHome
g pTop posts
g tTopics
g fFollowing
g lLiked
g yHistory
g qFAQ
EscBack / close