1,507 karma · joined April 5, 2008
It is already here. Google LFP batteries.
Of course, the long term solution is to grow as many new trees per year as we emit CO2, so there is an upper limit for our CO2 budget, but this should give use time to convert to carbon neutral energy production and consumption without hampering the the GDP growth too much. In fact, it has been estimated that world GDP can actually grow even during the transition, due to, for example, positive effects of improved environment (health improvements lead to productivity improvements and so on).
There is something heartwarming about the attention to detail in some games. NetHack, Dwarf Fortress, ... I wish more games would be made with this mindset. Many modern games seem to overemphasize the "gaming" aspect, and sometimes forget the "playing" with all its joyful intricacies.
<rant target="not you">
And why should management be able to evaluate technical decisions and code quality in the first place? That's our job! The problem is that we have given management the false choice of lower quality + faster shipping vs. higher quality + slower shipping, when in fact we should not have given them any say in the matter. And before we hit me with the but we have to be first to the market and fix it later line, I need to point out that companies don't die because they were not first to the market, they die because their operations and development became so slow and costly that they could not compete anymore.
What we should do as developers is to stop talking about code quality to our managers! When we are asked for an estimate, we give them as accurate estimate as possible with the code quality that we feel is sufficient for long-term maintainability of the system. And we don't negotiate on quality anymore, and especially we don't negotiate on estimates! Only functionality (MVP and all that). Then we don't need to ask for refactoring time, rewrite time, code polish time, stabilization time on our systems (that we hardly ever get anyway), because it is all in there in the original estimate.
Management expects stable productivity, they base their estimates of operational costs and investment costs on the number of people working on the system, not on the age of the codebase (why should an old codebase cost more to work with? they ask). If we give them false hope on the productivity of the team by producing crap fast in the beginning, the whole business case may collapse when we produce the same crap slower and slower and slower later. Management is in no position to evaluate the effects of bad code on the business case, because they don't understand that. We do. The only thing we can do as developers, is to remove the option of low quality code altogether.
And we say that it is so slow to create quality code? And estimation is hard?
We learn it. We can write high quality code as fast as the usual junk we see in most systems. We keep track on our estimates and evaluate how well we did, and improve. But it takes effort. All I can say is that it is our responsibility.
</rant>
On a positive note, the solution to this on a personal level is to find a place to work where technical excellence is built in the development culture (and there are such places), and cultivate that culture especially with the new hires (mentoring, pairing, etc.).
"I disapprove of what you say, but I will defend to the death your right to say it."
We should not be afraid that our ideas will lose if all sides are heard. We must win this war of ideas, there is no other way. But we cannot win unless we can point to what is wrong with their ideas. For us to achieve that, they must not be hidden.
It seems that history did not end. Every generation has to win their incarnation of this war, again and again, unfortunately. The beginning of our struggle is drawing nearer and nearer.
His plan is to evaluate the self-driving capability by comparing its performance to the human drivers, in shadow mode, perfect the technology to surpass human driver (10 times safer, per his comments), then present statistics from that to the relevant authorities (who should be qualified to evaluate any claim they make on these grounds), and only then proceed to release the self-driving technology to market.
I disagree that he is first a salesman. He is an engineer - and as an engineer he knows that anything he sells has to work or the product - and the company - does not last. He knows that very well, and has bet his fortunes on his engineering skills.
He is a salesman only second. And that is why this can actually work.
The thing is, every product is working and not working at the same time to a degree. It is only a matter of statistics - are we better off with or without the product.
Adjusting the rules and settings of R# is a daunting task, I agree. However, usually if I have special requirements for a project, I just set Inspection Severity to none for the language features I don't want to use, and that solves the issue for that project.
Yeah, I know, many of the features of ReSharper are something VS should have had for a decade, regardless whether ReSharper has them or not. We - VS users - tried to tell VS dev teams in around 2005 that JBuilder (of all things, if you can remember that - it got eventually Eclipsed) had better refactoring and navigation tools than Visual Studio. The message from VS has consistently been that you are going to fix that, and when I heard of Roslyn, I though that this time it may be really happening. Only it has been ten years. Luckily .NET/C# was marginally better from developer perspective than JVM/Java from the beginning (the difference has grown ever since), and ReSharper (and other plugins) helped to keep Visual Studio afloat until today.
Now that Microsoft has embraced open source, community contributions, shorter release cycles, .NET Core, etc., I think you have a great foundation for the next ten years of .NET.
Oh, rest assured, I will continue to bug you guys through different channels.
ReSharper | Options | Environment | Search & Navigation | Rich mouse navigation in the editorBut yeah, static analysis can yield false positives if you use for example reflection (one more reason to avoid it in most cases), but there's an option to turn a specific message off for particular line, class, etc. You can also edit ReSharper suggestions per solution basis, so if there are some special requirements, they can be incorporated into its behavior.
It is also worth noting that the structure of the code affects the static analysis and other features. It is faster to operate with lots of smaller isolated modules than large and coupled ones. The same techniques that kept C++ project compile times manageable, keep the static analysis real-time in C#. One more reason to decouple modules.
Upon reflection, my code editing workflow follows surprisingly often the results of the static analyzer: I remove a code element and let the ReSharper figure where I need to go to make the required changes, be that variables in one function - up to solution wide elements. Alt+PgDown - Alt+Enter is a very powerful combination.
Edit: my goodness, it just struck me that I have used C# for 13 years already.
New features in VS2017 that were already in ReSharper include configurable suggestions from static analysis, Ctrl+T navigation (it even uses the same shortcut), structured find references, intellisense filtering, multiple refactorings in given scope, live unit testing and coverage (in ReSharper Ultimate).
This is great and a bit amusing at the same time, but as a user, I like the improvements we get.