New GitHub Tool Lets Coders Build Software Like Bridges
wired.com
wired.com
Are bridges refactored 5 years after being built?
The other implicit conclusion that the article is making, that this will somehow make software more like a traditional engineering discipline also makes me a little uncomfortable. There still is no silver bullet. http://c2.com/cgi/wiki?NoSilverBullet
[1] http://martinfowler.com/bliki/BranchByAbstraction.html
[2] http://www.martinfowler.com/bliki/StranglerApplication.html
"There's another important idea here - when designing a new application you should design it in such a way as to make it easier for it to be strangled in the future. Let's face it, all we are doing is writing tomorrow's legacy software today. By making it easy to be strangled in the future, you are enabling the graceful fading away of today's work." -Martin Fowler
My point being that unit testing essentially gives you the same confidence in your refactoring efforts that Scientist proposes to offer. Tests already demand that your interface remains the same, and that old code does no harm when replacng legacy.
the sort of stuff you usually mock out in unit tests. and may not be feasible to have a whole copy of your prod 'big data' and services just for testing on
with Scientist you get a report not just of mismatched results and exceptions (stuff good tests should usually be able to catch) but also if the new code is slower
There's also exhibit C:
From Github repository "Scientist" : README.md
"How do I science?"I think something like that would be useful for a lot of people in industry who have to maintain legacy monoliths. The ideal tool would allow "switchover" from old to new gradually, one URL endpoint at a time.
This can be used to replay traffic https://github.com/buger/gor/ so can do load testing at least...
Headline got me excited but then I ended up at the GitHub page.
The Scientist software copies the input and feeds it into two systems in parallel. There is no analogy for that in real life. There is no way to copy cars.
And I really hope they do not actually need to run load tests for bridges after they have been built.
Software engineering is extremely unlike bridges in that bridges get constructed once. Software gets constructed (from source to machine code) every time you build and run it.
I know it's just an article, but...
If anyone thinks they should replace working Fortran code that does numerical analysis with Ruby, they should be fired.
The first being that the code works fine, the deployment works fine, everything is working just fine. Do. Not. Touch. It.
These are some of the most financially important systems in America to date. It's not a question about if they have to work, it's a question about just how bad things would get if they didn't work for even a day.
The next problem that comes up is what happens when someone finds a bug 60, 40, or even 10 years in the future? What happens when some of this old hardware breaks and it becomes not only impossible to find replacement parts but also impossible to fabricate new ones in house.
Eventually, like all languages, Fortran will die out as time goes on. So few people know it now that it is inevitable.
Eventually something has to give and we can do two things until then.
1. Wait for time to pass and pretend nothing will ever happen to these machines.
2. Slowly start rewriting all of the stack, and transferring everything to more modern systems designed to be just as long term as their predecessors so that in the event of a replacement being needed it exists.
I don't know about anyone else, but I like to have backups/fallbacks when planning for the future.
I'm not saying that Ruby or any new language should be entrusted with this kind of responsibility. But there needs to be a decision and it needs to be made over the next couple of decades.
You get a modern Fortran compiler, you compile the old code for the new stuff and off you go. What am I missing?
> Eventually, like all languages, Fortran will die out as time goes on. So few people know it now that it is inevitable.
Like ALL languages? Ha, tell that to the COBOL programmers at the heart of some financial institutions mate. Heck, RPG is still supported on some IBM hardware.
All languages die out eventually. It does not matter that it is a programming language, the concept will remain.
Nothing is perpetual, nothing lasts forever. I hate to break it to you, but eventually something will give.
"Slowly start rewriting all of the stack, and transferring everything to more modern systems designed to be just as long term as their predecessors so that in the event of a replacement being needed it exists."
This process is obvious, and has been going on for decades already.There are challenges of course, but thinking the problem is coding infrastructure and the lack of "modern" languages like ruby is a category error.
You must remember that relatively speaking compared to Fortran, C is a "modern" language.
In what way?
Fortran code is certainly not lower level than C and in many cases higher level. Furthermore, they are closer in age, for example, than Smalltalk is to Ruby.
And those where not simply 15 years, they were a very important 15 years of development.
Relatively, C is more modern than Fortran. It is also certainly more widespread.
Most Fortran programmers I know aren't programmers by trade - they're scientists or analysts who need to crunch numbers. Fortran doesn't need to be as feature complete or cutting edge as more general purpose languages.
I'm in webdev, and while it does have its worrying trends with regards to the larger trade of programming, they are largely insular and contained. Only way to explain this kind of behavior is to have worked your entire career in webdev (with horse blinders on) and have next-to-no understanding of computer science. That, or she doesn't give a shit because Github is paying her a fuck-ton not to.
I'm going to guess in this case, it's the latter.
But, I do completely agree that they've been dropping the ball lately.
Most dev shops have a whole bunch of things like this -- assorted libraries and internal tools that are 80-90% of the way to being somewhat useful to the public. It's fantastic that Github provides the time/space/expectation for employees to finish them.
Multi-version execution is an active area of research [1].
>> We can infer a shift from GitHub to alternate services soon from this, unless they change.
Nope. People are lazy. Will a lot of people write comments and all, how they are going to totally move away from github? Oh yeah, no doubt. But will they actually do it? Nah, just a few, unless github becomes as bad as source forge but I don't think it's going to happen, even then it would take some time.
Yes, yes, I am aware that migrating is just a matter of adding a new origin. That's the easy bit. But getting used to a new interface and everything, that takes much more effort and time. Writing a comment is easier (especially when tons of people are doing that around you) than changing your habits.
Even ignoring everything above, I don't really agree with the "puts effort into stuff like this as opposed to actually listening to their users" attitude. GitHub is not a one man's project. The whole company shouldn't drop everything just to do something right now because it was trending on HN a week or two ago. A company like this (making substantial product changes rather urgently based on some hype) maybe sounds cool but, in reality, you would probably not be excited to use their products. Urgent changes in features and quality often does not go together.
http://www.citylab.com/politics/2015/10/from-250-million-to-...
My biggest disappointment with "Scientist" is that it basically provides service which Erlang code has for free - hot code reloading. For decades now. Along with other cool features like great support for parallel execution, hierarchical monitoring and so on.
Article mentions some early user raves about this tool in context of "it allows me do refactoring!"
Of course it would help, but there are languages that either have all this cool stuff for decades (Erlang), or can allow you to do heavy refatoring without asking for help from "interesting" tools like this "Scientist" (Haskell).
Huh, does that apply less if they've basically never heard of you when they imitate you? Not to imply that Erlang is unheard of, I'm just saying it's not as popular and orthodox as Python/Ruby/C/java/etc.
http://www.cs.umd.edu/~hollings/papers/apijournal.pdf
And there even older one (I cannot find because search in my blog (LJ) is broken).