News for hackers. Stuff that matters.
Re:The Second Edition of “Refactoring” by lemoncucumber on Saturday December 01, 2018 @04:44PM (#18579153)
Compared to the first edition of the book the second edition has the same functionality but is much better organized, which will make future editions much easier to develop.
Re:The Second Edition of “Refactoring” by dajonker on Saturday December 01, 2018 @07:18PM (#18579940)
Would you say the book has been refactored? Nah, just kidding, the author would probably call it restructured.
Re:The Second Edition of “Refactoring” by IshKebab on Sunday December 02, 2018 @10:25AM (#18582674)
That's the joke.
Re:The Second Edition of “Refactoring” by mherrmann on Saturday December 01, 2018 @03:43PM (#18578820)
No other book improved my coding style as much as the first edition of Refactoring. On a superficial level, it teaches you how to "clean up" code, according to various patterns. But what it really does is give you a feeling for why the code should be improved in the first place. Highly recommended.
Re:The Second Edition of “Refactoring” by cpeterso on Saturday December 01, 2018 @03:56PM (#18578876)
Once one adopts the refactoring mindset, its lessons and approaches can also infuse new code aka "prefactoring". :) Ken Pugh wrote a 2005 book called " Prefactoring: Extreme Abstraction - Extreme Separation - Extreme Reliability 1st Edition", which won a 2006 Dr. Dobbs' Jolt award.

http://www.drdobbs.com/joltawards/2006-jolt-awards/187900423...

Re:The Second Edition of “Refactoring” by clumsysmurf on Saturday December 01, 2018 @10:49PM (#18580674)
Did you also read "Refactoring to Patterns"? If so, could you compare that with Prefactoring ?

https://industriallogic.com/xp/refactoring/

Re:The Second Edition of “Refactoring” by cpeterso on Sunday December 02, 2018 @02:04AM (#18581210)
Sorry. I haven't read that book. :)
Re:The Second Edition of “Refactoring” by raymondh on Saturday December 01, 2018 @02:20PM (#18578369)
I think almost every programmer would benefit from reading "Refactoring". It sharpened my skills quite a bit, and I was already experienced before encountering the book.

The book was an easy read and was an efficient use of my time. I expect that rewrite in Javascript will further improve the information density.

Re:The Second Edition of “Refactoring” by kristiandupont on Saturday December 01, 2018 @03:39PM (#18578796)
I bought the book ages ago and remember not really finding anything of value in it. I don't mean to sound like someone from /r/iamverysmart but I recall thinking I would benefit in the way I did from the design patterns book: by giving me terminology for things I already did. But as far as I remember, the names were really obvious ("rename parameter", "extract method", etc.) and the instructions equally so. Can you give an example of something you learned from it?
Re:The Second Edition of “Refactoring” by quietbritishjim on Saturday December 01, 2018 @06:21PM (#18579649)
I remember having exactly the same experience, including the anticipation that I would benefit from it the way I would from Design Patterns. For most of the refactorings in the book, a bullet point in a list would've seemed a bit excessive, never mind a step-by-step sequence of instructions. In the end I literally threw the book away – the only technical book I've ever done that to.

I distinctly remember one of the things in the book, which in retrospect isn't even really a refactoring, called something like "null object". The idea was that if you were going to return null from a function (e.g. get student by ID but that ID doesn't exist) then you could instead return a concrete singleton object that represented null. That way, if you forgot to check for it then at least your program wouldn't crash. Now, the merits of this idea are debatable and I don't think I've ever used it in the years since. But I strongly remember thinking at the time that it was the only idea in the book that wasn't totally obvious.

There was a good chapter early on about testing, which I think was my first exposure to that idea. It was a bit brief but that's not a surprise given it was a bit of a digression from the main topic. A whole book on that might've been quite a bit more interesting.

Re:The Second Edition of “Refactoring” by dennisgorelik on Saturday December 01, 2018 @11:24PM (#18580779)
> if you forgot to check for it then at least your program wouldn't crash

If I forgot to check for null (or missing data) then I would rather have my program to raise an exception (to prevent data corruption). Then my error handling code will email that exception to me. I will analyze exception message (NPE) and stack trace. Then I will fix my program and deploy it to production.

Re:The Second Edition of “Refactoring” by Too on Sunday December 02, 2018 @02:58AM (#18581336)
Depends on the context. In game engines it's quite common to just render a generic pattern when a texture could not be found, instead of crashing the whole game. That's a good use for this pattern, not so good example would be in a bank transaction backend.
Re:The Second Edition of “Refactoring” by joshka on Sunday December 02, 2018 @03:03AM (#18581347)
I use this pattern fairly regularly in a variety of ways. Here's a quick piece of example code that might help explain this a bit better. I'm writing this example in C#, but I usually work in other languages (Java / ruby / Python / JS),

before:

  public Student GetStudentById(int id)
  {
    var record = db.findStudentById(id)
    if (record == null) return null;
    return new Student(record.id, record.name, ...);
  }
Then in say a student record controller class:

  public View Get(int id)
  {
    var student = getStudentById(id);
    if (student == null) return View("NotFound");
    return View("Display", student);
  }
After:

  [ContractAnnotation("=> notnull")]
  public StudentSearchResult GetStudentById(int id)
  {
    var record = db.findStudentById(id);
    if (record == null) return StudentSearchRsult.NotFound;
    return new StudentSearchResult(record.id, record.name, ...);
  }
Then:

  public View Get(int id)
  {
    var student = getStudentById(id);
    return new View(student.ViewName, student); // look no null check becase student.ViewName is always valid here
  }
Note: of course this is entirely simplified for the purposes of example. Perhaps your real world example doesn't return null from the db, but a RecordSet with either 0 or 1 elements. Perhaps your db uses exceptions that you translate into results like this.

The cool thing there is that you get tool support (from e.g. ReSharper) telling your that this is entirely safe to do without a null check and tool support when it's not.

Re:The Second Edition of “Refactoring” by goto11 on Sunday December 02, 2018 @08:49AM (#18582282)
But then the 'Student' object does not represent a student but represent the result of a search which may or may not be a student, and this result decides its own view. Effectively the model is coupled to a specific view, which seems wrong to me. I would much prefer to have the search return an Option<Student> and then have the controller select the view based on this option. This also makes it explicit that the search may nor return a result, which is not really explicit if it always returns a Student instance.
Re:The Second Edition of “Refactoring” by joshka on Tuesday December 04, 2018 @08:56PM (#18605171)
Note the explicit change to StudentSearchResult over student there to make your last comment kind of a yes, I agree and that was the intent...

There are many ways that this can be implemented that avoid an if result != null / == no value, often a map suffices.

Re:The Second Edition of “Refactoring” by myth_buster on Saturday December 01, 2018 @08:53PM (#18580286)
Re:The Second Edition of “Refactoring” by endgame on Sunday December 02, 2018 @01:01AM (#18581059)
Thinking more about this, null object are meant to be neutral with respect to some behaviour, but that behaviour isn't really specified alongside the object. It seems like it's a weaker reinvention of the idea of an "identity element" from e.g., the `Monoid` typeclass. I say "weaker" because `Monoid` specifies the neutral element (`mempty`) alongside the behaviour (`mappend`), whereas the null object pattern does not.
Re:The Second Edition of “Refactoring” by paulddraper on Saturday December 01, 2018 @11:32PM (#18580806)
Ay ay ay.

This is basically a workaround for a defect of certain typed programming languages that allow null everywhere.

Worst mistake of computer science.

https://www.lucidchart.com/techblog/2015/08/31/the-worst-mis...

Re:The Second Edition of “Refactoring” by goto11 on Sunday December 02, 2018 @08:55AM (#18582311)
No really, it is almost the opposite. The mistake was to have null be a valid value for all object types. Languages where nullability is represent in the type system (e.g. Typescript) does not have this problem. But the null-object pattern introduces the same problem in a new way.
Re:The Second Edition of “Refactoring” by paulddraper on Sunday December 02, 2018 @05:54PM (#18585096)
In languages without "everything can be null", the null-object pattern is what is always done.

The problem with "everything can be null" is the type system is prevented from finding very common "you can't do this thing" errors.

Without it, everyone uses null objects (or Maybe, a generic for of this) and there are no segmentation faults/dereferencing errors. (Yes there can be other sorts of errors, but the problem has been made far better.)

Re:The Second Edition of “Refactoring” by goto11 on Sunday December 02, 2018 @06:18PM (#18585211)
The "Null object pattern" is a particular pattern where missing values are represented with an object with "neutral" behavior. This is not the same as an actual null or an option type.
Re:The Second Edition of “Refactoring” by jammygit on Saturday December 01, 2018 @03:35PM (#18578770)
The seller apparently needs my address to sell me an ebook, and it thinks my postal code is fake and locked me out. Well played, Pearson.
Re:The Second Edition of “Refactoring” by luckydata on Saturday December 01, 2018 @05:02PM (#18579250)
Fraud detection. You could be using a stolen credit card, address helps with that.
Re:The Second Edition of “Refactoring” by jhayward on Saturday December 01, 2018 @05:10PM (#18579297)
Also tax computation, and sometimes trade regulations.
Re:The Second Edition of “Refactoring” by jammygit on Saturday December 01, 2018 @03:18PM (#18578684)
I've read and enjoyed quite a few of Fowler's articles. The things I've taken from his writings have been concretely valuable so far too. I'm not experienced enough though to evaluate how his ideas stand up in big or complicated projects.

Can anybody comment?

Re:The Second Edition of “Refactoring” by danmaz74 on Saturday December 01, 2018 @06:09PM (#18579582)
I can't comment on other articles, but I would be careful with some suggestions about mocking everything in automated tests. I've seen a couple of totally botched projects because of that approach.
Re:The Second Edition of “Refactoring” by jammygit on Sunday December 02, 2018 @01:26AM (#18581108)
How did the mocks do the damage? Lack of integration tests, wasted time, or something else?
Re:The Second Edition of “Refactoring” by danmaz74 on Sunday December 02, 2018 @06:47AM (#18581949)
Yes, the biggest problem was the lack of integration* tests: you can get a false confidence that everything is working, but you only know that the individual cogs are built to spec, not that the machine is working.

Second problem was that refactoring became much harder, because the tests were deeply tied to the implementation (are methods X, Y and Z called with such and such arguments?).

* using the definition of "integration" as "integrating components of the project", not "integrating with external services" (which is the definition I personally prefer).

Re:The Second Edition of “Refactoring” by billsix on Sunday December 02, 2018 @01:48AM (#18581170)
It results in tautological tests.
Re:The Second Edition of “Refactoring” by softawre on Monday December 03, 2018 @03:18PM (#18592504)
Not really. I mean, you're still testing that the compiler works and that the memory works. ;)
Re:The Second Edition of “Refactoring” by azhenley on Saturday December 01, 2018 @02:22PM (#18578381)
For most people, I think his online catalog of refactorings and blog articles are sufficient. Though I think the first edition is a good book, I wouldn’t need it if I didn’t do research on refactoring tools.
Re:The Second Edition of “Refactoring” by kalev on Saturday December 01, 2018 @02:33PM (#18578447)
Did not know there was a online library of refactorings. Here’s the link https://refactoring.com/catalog/ if anyone’s interested.
Re:The Second Edition of “Refactoring” by bpicolo on Saturday December 01, 2018 @02:44PM (#18578514)
What's the target demographic for something like this? It seems like the trivial part of refactoring.

I've seen a similar, entire book dedicated to database refactoring that had roughly the same pattern. Chapters named akin to "The Change Table Name Refactor" felt kind of bizarre, when what I was hoping would be contained was advice about refactoring large databases in practice (moving data to new service boundaries, etc). Practical advice on building systems to move data and such seems to be just missing

Re:The Second Edition of “Refactoring” by darrenhobbs on Saturday December 01, 2018 @06:43PM (#18579768)
I read the first edition when I was nearly 2 years into my professional career. I understood the basic 'what' and 'how' of software development.

Refactoring helped me start to understand the 'why' and 'when'. Why is design A better than design B? When is it time to tidy up this code? Which choice will be easier to change later? That kind of thing.

Re:The Second Edition of “Refactoring” by CiaranMcNulty on Saturday December 01, 2018 @04:15PM (#18578981)
> It seems like the trivial part of refactoring.

Trivial after the book exists, sure

The catalog misses out most of the interesting discussion

Re:The Second Edition of “Refactoring” by yazr on Saturday December 01, 2018 @05:20PM (#18579345)
Is anyone aware of a birds-eye catalog of common code abstractions?

e.g. linked list, hashes, lookup table, classes, counters, iterators, etc

(Not referring to books such as TAOCP which cover a few topics in-depth)

Re:The Second Edition of “Refactoring” by yowlingcat on Saturday December 01, 2018 @08:39PM (#18580226)
By code abstractions, do you mean low level data structures[1]? There are those but they're different from mid level design patterns[2][3] or high level architectural patterns[4].

[1]https://en.wikipedia.org/wiki/List_of_data_structures

[2]https://martinfowler.com/eaaCatalog/

[3]https://sourcemaking.com/design_patterns

[4]http://aosabook.org/en/index.html

Re:The Second Edition of “Refactoring” by steveklabnik on Saturday December 01, 2018 @05:23PM (#18579366)
Re:The Second Edition of “Refactoring” by yazr on Saturday December 01, 2018 @05:50PM (#18579486)
Well, I can probably mine 10 tops books and come up with a good list of 100 abstractions. But i am sure someone has done a much better job than me on this..
Re:The Second Edition of “Refactoring” by myth_buster on Saturday December 01, 2018 @02:08PM (#18578298)
> When I choose a language for examples in my writing, I think primarily of the reader. I picked Java because I felt the most people would be able to understand the code examples if they were written in Java. That was the case in 1997, but how about in 2017? [...] Such a language needed to be widely popular, among the top half a dozen in language popularity surveys. It really helps to have a C-based syntax, since most programmers would recognize the basic code structure. Given that, two stood out. One was Java, still widely used and easy to understand. But I went for the alternative: __JavaScript__. [...] But the compelling reason for choosing it over Java is that isn't wholly centered on classes. There are top-level functions, and use of first-class functions is common. This makes it much easier to show refactoring out of the context of classes.

This is very interesting choice of language. I wonder whether typescript could have been a candidate as well. Although not as popular as JS, I believe most of JS community has migrated to typescript (due to obvious benefits) and it is more closer to a C-based language.

Re:The Second Edition of “Refactoring” by nullandvoid on Saturday December 01, 2018 @02:50PM (#18578542)
Whilst a fan of typescript myself I think the last statement is incorrect, I'd be surprised if >20%-30% of projects started in JS this year are typescript.
Re:The Second Edition of “Refactoring” by regularfry on Saturday December 01, 2018 @06:43PM (#18579767)
I'd be shocked if it was higher than 10%, and that's not even the bulk of JS work: the vast majority is brownfield, existing projects, where changing the toolchain is decidedly nontrivial. TS is nice, but it's a long way from ubiquity.
Re:The Second Edition of “Refactoring” by chrisseaton on Saturday December 01, 2018 @02:20PM (#18578373)
> I believe most of JS community has migrated to typescript

You think the majority of JS developers have switched over to TypeScript?

Re:The Second Edition of “Refactoring” by ChristianGeek on Saturday December 01, 2018 @03:04PM (#18578612)
That (quoted) is a bubble statement if I’ve ever seen one.
Re:The Second Edition of “Refactoring” by myth_buster on Saturday December 01, 2018 @03:53PM (#18578860)
_has_ may be incorrect but I do feel the switch is happening [0]. Angular which is the most popular client side JS framework is using Typescript. React is also moving in the same direction with typescript-react-starter and tsx support.

[0] https://2018.stateofjs.com/javascript-flavors/overview/

Re:The Second Edition of “Refactoring” by BurningFrog on Saturday December 01, 2018 @04:01PM (#18578902)
In my (part of the) JS world Angular is dying and React has long since won.
Re:The Second Edition of “Refactoring” by twblalock on Saturday December 01, 2018 @05:19PM (#18579344)
I agree, I don't know any front end devs who would choose Angular for a new project. The current choice seems to be between React and Vue.
Re:The Second Edition of “Refactoring” by Geee on Saturday December 01, 2018 @08:20PM (#18580157)
Angular is not the most popular [0].

[0] https://2018.stateofjs.com/front-end-frameworks/conclusion/

Re:The Second Edition of “Refactoring” by jammygit on Saturday December 01, 2018 @02:25PM (#18578400)
If you know typescript, you're familiar enough with javascript to use the book, but if you don't know typescript then its a bit tricky for those readers. It just means fewer people have to dust off their language skills to benefit from the book.
Re:The Second Edition of “Refactoring” by ummonk on Saturday December 01, 2018 @02:34PM (#18578458)
Well, I'm very fluent in Typescript, and often find JS code extremely difficult to understand. The types are a great aid to understanding code. It also seems to be the case that a lot of JS code does not use ES6 polyfills, unlike Typescript code, so it tends to be less clean.

Edit: Upon rereading I see you are talking about the book, not actual projects, so my reply is not all that applicable. Though I'd actually say that Typescript is much more understandable than JS to someone unfamiliar with both.

Re:The Second Edition of “Refactoring” by jammygit on Saturday December 01, 2018 @03:20PM (#18578694)
"Typescript is much more understandable than JS to someone unfamiliar with both."

From that point of view, I see what you're saying.

Re:The Second Edition of “Refactoring” by azhenley on Saturday December 01, 2018 @02:19PM (#18578365)
Even more interesting is that he previously came out with a Ruby edition: https://martinfowler.com/books/refactoringRubyEd.html
Re:The Second Edition of “Refactoring” by bdcravens on Saturday December 01, 2018 @05:00PM (#18579241)
How much of it did he write?

I suspect it was much like "Agile Web Development with Rails", which up until the most recent edition, listed DHH as an author

Re:The Second Edition of “Refactoring” by genieyclo on Saturday December 01, 2018 @10:46PM (#18580668)
yeah the Ruby edition is full of errors so be careful.
Re:The Second Edition of “Refactoring” by bdcravens on Sunday December 02, 2018 @12:28PM (#18583287)
Early on in my Ruby career, I picked it up, but really couldn't get much traction with it. Hartl's book was far better.
Re:The Second Edition of “Refactoring” by genieyclo on Sunday December 02, 2018 @04:30PM (#18584666)
Hartl has a book on refactoring?

We're going through http://refactoring.guru at work right now, it's a nice modern version of Fowler's classic imo.

Re:The Second Edition of “Refactoring” by sveme on Saturday December 01, 2018 @02:47PM (#18578523)
Saw him in a talk just last week - he actually mentioned that typescript would have been an alternative, but considered it less well known yet.
[dead]
Re:The Second Edition of “Refactoring” by dang on Saturday December 01, 2018 @07:23PM (#18579958)
Please keep programming language flamewars well away from HN.
Re:The Second Edition of “Refactoring” by LolNoGenerics on Sunday December 02, 2018 @06:37PM (#18585295)
Naive fainboyism as well
Re:The Second Edition of “Refactoring” by alasdair_ on Sunday December 02, 2018 @12:29AM (#18580984)
I am a huge fan of this book. The Pragmatic Programmer and this book are the two that I recommend most.

When I first read Refactoring, IntelliJ wasn't released yet and refactorings still needed to be done by hand. Automated refactorings are so incredibly useful when it comes to improving code quality over time that I don't know what it was we did without them.

Re:The Second Edition of “Refactoring” by Ericson2314 on Saturday December 01, 2018 @02:58PM (#18578583)
Refactoring with and without types feels so different. I'm surprised the book so lightly made the switch.
Re:The Second Edition of “Refactoring” by billsix on Saturday December 01, 2018 @09:21PM (#18580380)
But he learned about refactoring in Smalltalk 80, and later wrote the book in java
Re:The Second Edition of “Refactoring” by josteink on Saturday December 01, 2018 @03:35PM (#18578766)
Is it really? Types just help formalize (for you and the compiler) what the code actually says.

Types or not, the refactored code itself is still refactored.

Re:The Second Edition of “Refactoring” by btilly on Saturday December 01, 2018 @04:27PM (#18579049)
Which way you really want a refactor to go can depend on the presence of the type system. As well the reliability of refactoring doesn't.

For example consider the thing you constantly see in Java where you construct an object then assign each property through a method. The type system will catch it if the property is not passed correctly.

In a dynamic language like JavaScript the same is better done with an inline object. The reason being that the type system won't catch it if there is a mistake, and so you want to go for the easiest way to write it. On the theory that less code is less maintenance.

However now it is hard to rename a property and be sure that your refactor is correct. Because where does a property come from? It could come from anywhere - over the network, from an API call, the name of a database field - it is easy to miss it.

Which means that not only should the refactor go in a different direction, but how safe you feel in doing refactors will also go in a different direction!

Re:The Second Edition of “Refactoring” by BurningFrog on Saturday December 01, 2018 @04:04PM (#18578921)
In a typed language, an IDE can make breathtakingly large refactorings that are 100% correct.
Re:The Second Edition of “Refactoring” by Jach on Saturday December 01, 2018 @06:29PM (#18579697)
This is a funny subthread considering the first useful refactoring tools were for dynamic languages[0], not static ones. Static types might have some advantages for a refactoring tool, but dynamic languages have their advantages too that might make a refactoring tool easier to create.[1]

Can refactoring tools miss something? Sure, but this holds true for various static languages too. Don't sell the nonsense of 100%. Find me a Java IDE that won't miss reflection calls. (Personally I can point to a tool for Java that moves the bar above 0, but it also isn't 100%.)

Just because you're used to shitty dynamic languages isn't a statement about dynamic languages in general or the possible tooling, anymore than being used to shitty static languages is a statement about static languages in general or the possible tooling. I also see someone conflating "dynamic" with "untyped"/"non-typed" -- there are very few untyped languages, let alone in wide use, "dynamic" doesn't mean the same thing.

I'm looking forward to the JS version of the book just for recommendation purposes because I hope it will put a rest to so many of these threads about refactoring in the absence of a static type system being somehow way harder or impossible.

Ultimately I think the discomfort is from fear, certain programmers practice fear-driven development. "What if the tool (or me, if I'm taking 5 mins instead of 5 seconds to do it) misses something?" It's the same fear with people who can't imagine refactoring without unit tests, but who need to refactor legacy code to get it under test. You can do these things, they're not particularly difficult, but if you're suffering from fear, I'm not going to convince you. Maybe a book + examples would though.

[0] http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.91....

[1] http://wiki.c2.com/?RefactoringBrowser

Ralph Johnson: "We originally thought that the lack of static type-checking would make it hard to build a refactoring browser for Smalltalk. Lack of type information is a disadvantage, but the advantages of Smalltalk made it a lot easier to make a refactoring browser for Smalltalk than it would have have been for C++ or Java."

Re:The Second Edition of “Refactoring” by josteink on Saturday December 01, 2018 @04:36PM (#18579107)
That’s obviously true, but you seem to be conflating refactored code with tooling support for refactoring.

Done by a tool or not, the refactoring in principle remains the same. The tool merely automates the transformations which defines the refactoring.

And in that sense types isn’t really essential to refactoring at all.

Re:The Second Edition of “Refactoring” by twblalock on Saturday December 01, 2018 @05:17PM (#18579333)
Types make it much, much easier to write useful refactoring tools, and to verify that the tools did the right thing.
Re:The Second Edition of “Refactoring” by exceptione on Saturday December 01, 2018 @05:50PM (#18579484)
In theory it might be non-essential, but in practice it might mean that refactorings might be unfeasable or too costly in non-typed codebases.

The more I think about it, the less it makes sense to bother about refactoring when you did not bother about type level guarantees in the first place.

Re:The Second Edition of “Refactoring” by BurningFrog on Saturday December 01, 2018 @04:39PM (#18579128)
I'm not conflating anything. Just stating a fact.
Re:The Second Edition of “Refactoring” by taeric on Saturday December 01, 2018 @04:28PM (#18579059)
Most common refactoring can be done in any language. If you have types, that really just means the compiler is testing many of your assertions.
Re:The Second Edition of “Refactoring” by nsm on Saturday December 01, 2018 @06:44PM (#18579779)
Types help eliminate an entire class of unit tests one would need to write before refactoring. Things like newtype also allow enforcing certain constraints while refactoring. So yes, while the end goal is the same, the process is simplified.
Re:The Second Edition of “Refactoring” by josteink on Sunday December 02, 2018 @11:39AM (#18583013)
I’m not against types. In fact I mostly prefer typed languages.

I’m just stating that there is nothing fundamental about code-refactoring which ties it exclusively to the domain of typed programming-languages, something I consider fairly self-evident.

I mean obviously one can refactor terrible code in any language to help improve its structure right?

That this remark would cause such sub-thread defending types in general (I never said they didn’t have value) has me honestly quite surprised.

Re:The Second Edition of “Refactoring” by billsix on Saturday December 01, 2018 @07:28PM (#18579981)
I thought this new book would be the third edition.

https://www.amazon.com/Refactoring-Ruby-Addison-Wesley-Profe...

Re:The Second Edition of “Refactoring” by ninjakeyboard on Saturday December 01, 2018 @07:36PM (#18580008)
Oh man thanks for posting this. Did not expect to see this come. I have both of them ("Refactoring" and then the "ruby edition") - it's a part of my vocabulary.

Also thanks to other posters who describe their view of the updates of content.

Re:The Second Edition of “Refactoring” by ksec on Sunday December 02, 2018 @07:33AM (#18582054)
Does anyone know if Martin Fowler still doing any Ruby? Or has he given up on it?