<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dw="https://www.dreamwidth.org">
  <id>tag:dreamwidth.org,2016-12-24:2586985</id>
  <title>Dennis Gorelik</title>
  <subtitle>Dennis Gorelik</subtitle>
  <author>
    <name>Dennis Gorelik</name>
  </author>
  <link rel="alternate" type="text/html" href="https://dennisgorelik.dreamwidth.org/"/>
  <link rel="self" type="text/xml" href="https://dennisgorelik.dreamwidth.org/data/atom"/>
  <updated>2019-09-11T23:00:56Z</updated>
  <dw:journal username="dennisgorelik" type="personal"/>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2586985:176624</id>
    <link rel="alternate" type="text/html" href="https://dennisgorelik.dreamwidth.org/176624.html"/>
    <link rel="self" type="text/xml" href="https://dennisgorelik.dreamwidth.org/data/atom/?itemid=176624"/>
    <title>StackOverflow expertise indicator</title>
    <published>2019-09-11T23:00:56Z</published>
    <updated>2019-09-11T23:00:56Z</updated>
    <category term="programming"/>
    <category term="quora"/>
    <category term="experts"/>
    <category term="stackoverflow"/>
    <category term="expertise"/>
    <dw:security>public</dw:security>
    <dw:reply-count>3</dw:reply-count>
    <content type="html">~~~~~&lt;br /&gt;&lt;a href="https://www.quora.com/What-are-some-signs-that-you-have-become-a-better-software-engineer/answer/Ben-Podgursky"&gt;https://www.quora.com/What-are-some-signs-that-you-have-become-a-better-software-engineer/answer/Ben-Podgursky&lt;/a&gt;&lt;br /&gt;When you start out, you’re confident “bah, any decent answer on StackOverflow has at least 1,000 upvotes”&lt;br /&gt;.....&lt;br /&gt;A few months in, you realize that mostly only the the “help how i code” questions have thousands of upvotes. There are tons of useful answers in the hundreds range&lt;br /&gt;.....&lt;br /&gt;Until you finally become a “senior” engineer. You try to drag one last sip from the StackOverflow Slurpee, and you get nothing but ice and disappointment&lt;br /&gt;~~~~~&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=dennisgorelik&amp;ditemid=176624" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2586985:168845</id>
    <link rel="alternate" type="text/html" href="https://dennisgorelik.dreamwidth.org/168845.html"/>
    <link rel="self" type="text/xml" href="https://dennisgorelik.dreamwidth.org/data/atom/?itemid=168845"/>
    <title>Code reuse</title>
    <published>2019-03-25T06:52:31Z</published>
    <updated>2019-03-25T06:53:07Z</updated>
    <category term="software development"/>
    <category term="software design"/>
    <category term="programming"/>
    <dw:security>public</dw:security>
    <dw:reply-count>6</dw:reply-count>
    <content type="html">From 11 years of maintaining &lt;a href="https://www.postjobfree.com"&gt;my own codebase&lt;/a&gt; I learned that reusing fields is a bad idea that leads to poor code maintainability.&lt;br /&gt;If unrelated methods use the same fields, then graph of field references start looking like a maze that is very hard to understand.&lt;br /&gt;If "UserId" field is called by 19 methods from at least 2 distinct logical groups, then it takes long time to find out if we still need to load UserId from database record in JobAlertRequest().&lt;br /&gt;If count of UserId references was much lower, then such review would take much less time.&lt;br /&gt;&lt;br /&gt;Reusing fields (and local variables) is, generally, bad for maintenance.&lt;br /&gt;But reusing methods is, generally, good for maintenance: if we fix bugs in a reused method - all places that use functionality are getting fixed.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=dennisgorelik&amp;ditemid=168845" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2586985:138616</id>
    <link rel="alternate" type="text/html" href="https://dennisgorelik.dreamwidth.org/138616.html"/>
    <link rel="self" type="text/xml" href="https://dennisgorelik.dreamwidth.org/data/atom/?itemid=138616"/>
    <title>Code reuse abuse</title>
    <published>2017-08-12T05:43:52Z</published>
    <updated>2017-08-12T05:43:52Z</updated>
    <category term="code reuse"/>
    <category term="programming"/>
    <category term="architecture"/>
    <dw:security>public</dw:security>
    <dw:reply-count>2</dw:reply-count>
    <content type="html">--&lt;br /&gt;&lt;a href="https://news.ycombinator.com/item?id=14990587"&gt;https://news.ycombinator.com/item?id=14990587&lt;/a&gt;&lt;br /&gt;I think it's more likely that your "great programmers" simply understand the difference between the same functionality and accidentally similar functionality. The latter is where you have two use cases that are very similar, so you spend all this time deduplicating. Then one of the use cases changes... The correct response would be to duplicate the code again, because the two use cases are no longer similar. In reality, they should have never been combined in the first case. They weren't the same; they were only accidentally similar.&lt;br /&gt;But instead what you usually see is minor tweaks to the common functions. Pass in a flag here, tweak the inputs there, add an if statement over yonder... And before you know it, it's all a terrible tangled mess that is full of branches and technical debt. The two use cases have the same functions, but don't even follow the same branches within the functions.&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=dennisgorelik&amp;ditemid=138616" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2586985:135111</id>
    <link rel="alternate" type="text/html" href="https://dennisgorelik.dreamwidth.org/135111.html"/>
    <link rel="self" type="text/xml" href="https://dennisgorelik.dreamwidth.org/data/atom/?itemid=135111"/>
    <title>ElasticSearch Percolator Bloat - the Defense</title>
    <published>2017-06-22T14:50:43Z</published>
    <updated>2017-06-22T14:52:10Z</updated>
    <category term="programming"/>
    <category term="software"/>
    <category term="percolator"/>
    <category term="elasticsearch"/>
    <category term="bloat"/>
    <category term="wtf"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">ElasticSearch team defends the bloat in ElasticSearch Percolator 5.4&lt;br /&gt;--------&lt;br /&gt;&lt;a href="https://github.com/elastic/elasticsearch/issues/25308"&gt;https://github.com/elastic/elasticsearch/issues/25308&lt;/a&gt;&lt;br /&gt;If you're not interested in ranking you can easily turn it off, by wrapping the percolate query in a constant_score query.&lt;br /&gt;.....&lt;br /&gt;The percolator tries to tag the queries automatically based on the containing query terms. However it can't do this for all percolator queries, because the percolator doesn't know how to extract meaningful information during indexing for all queries. This is a work in progress and will get better over time. It already has shown a significant performance improvement for cases where the percolator was able to analyze the percolator query correctly at index time.&lt;br /&gt;--------&lt;br /&gt;&lt;br /&gt;1) Funny how in order to turn off unneeded feature, application developers have to create an extra wrapper around their query.&lt;br /&gt;&lt;br /&gt;2) "work in progress" did not stop ElasticSearch team from breaking backward compatibility and forcing their users to rewrite their legacy code in favor of "work in progress" ElasticSearch 5.4.&lt;br /&gt;&lt;br /&gt;3) "a significant performance improvement" is not quantified, and the cases where that improvement happened -&lt;br /&gt; not described.&lt;br /&gt;&lt;br /&gt;See also: &lt;a href="http://dennisgorelik.dreamwidth.org/134301.html"&gt;ElasticSearch Percolator Bloat - part 1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=dennisgorelik&amp;ditemid=135111" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2586985:133985</id>
    <link rel="alternate" type="text/html" href="https://dennisgorelik.dreamwidth.org/133985.html"/>
    <link rel="self" type="text/xml" href="https://dennisgorelik.dreamwidth.org/data/atom/?itemid=133985"/>
    <title>Spark Language vs Apache Spark</title>
    <published>2017-06-14T01:19:22Z</published>
    <updated>2017-06-14T01:19:22Z</updated>
    <category term="wtf"/>
    <category term="java world"/>
    <category term="programming"/>
    <dw:security>public</dw:security>
    <dw:reply-count>7</dw:reply-count>
    <content type="html">Today I learned that &lt;a href="http://juan-gandhi.dreamwidth.org/3963182.html?thread=110326574#cmt110326574"&gt;Spark programming language has nothing to do with Apache Spark&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;That "&lt;a href="https://en.wikipedia.org/wiki/SPARK_(programming_language)"&gt;Spark Language&lt;/a&gt; vs &lt;a href="https://en.wikipedia.org/wiki/Apache_Spark"&gt;Apache Spark&lt;/a&gt;" confusion is even worse than "Java vs Javascript" confusion.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=dennisgorelik&amp;ditemid=133985" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2586985:125941</id>
    <link rel="alternate" type="text/html" href="https://dennisgorelik.dreamwidth.org/125941.html"/>
    <link rel="self" type="text/xml" href="https://dennisgorelik.dreamwidth.org/data/atom/?itemid=125941"/>
    <title>Шкафы со скелетами в программировании</title>
    <published>2017-02-27T07:32:43Z</published>
    <updated>2017-02-27T07:32:43Z</updated>
    <category term="шкафы со скелетами"/>
    <category term="подвалы сознания"/>
    <category term="programming"/>
    <category term="software"/>
    <dw:security>public</dw:security>
    <dw:reply-count>1</dw:reply-count>
    <content type="html">By &lt;a href="https://juan-gandhi.dreamwidth.org/"&gt;juan-gandhi&lt;/a&gt;:&lt;br /&gt;---&lt;br /&gt;1) Мутабельные ключи в "хашмапе". &lt;br /&gt;2) Стек для регистрации данных для последующей проверки, что мусора не осталось. Т.к. указатель на стек глобальный, а бегают несколько ниток, то чистый абсурд.&lt;br /&gt;3) Класс на 183 метода, 0 тестов.&lt;br /&gt;4) Регулярно, случайным образом, рушащиеся тесты, и святая вера, что "за последние несколько лет у нас ничего не ломалось".&lt;br /&gt;5) Вера в то, что у нас все очень "эффективно" - и регулярные жалобы юзеров, что наш код очень медленный, в отличие от скального конкурента (!)&lt;br /&gt;6) "Оптимистический мерж" - "это не мой тест упал, я тут не при чем, нам нужно релизить.&lt;br /&gt;---&lt;br /&gt;&lt;br /&gt;1) Интересно, зачем кому-то понадобилось делать мутабельные ключи в хашмапе?&lt;br /&gt;2) Мне лично не встечалось, хотя при работе в &lt;a href="http://dennisgorelik.dreamwidth.org/123635.html"&gt;multithread environment&lt;/a&gt; каких только ляпов не сделаешь...&lt;br /&gt;3), 4), 5), 6) - мне в том или ином виде встречалось.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=dennisgorelik&amp;ditemid=125941" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2586985:125623</id>
    <link rel="alternate" type="text/html" href="https://dennisgorelik.dreamwidth.org/125623.html"/>
    <link rel="self" type="text/xml" href="https://dennisgorelik.dreamwidth.org/data/atom/?itemid=125623"/>
    <title>No mistakes - means "too slow"</title>
    <published>2017-02-27T06:57:37Z</published>
    <updated>2017-02-27T06:57:37Z</updated>
    <category term="speed"/>
    <category term="performance"/>
    <category term="mistakes"/>
    <category term="code"/>
    <category term="programming"/>
    <dw:security>public</dw:security>
    <dw:reply-count>0</dw:reply-count>
    <content type="html">From &lt;a href="http://dennisgorelik.livejournal.com/127062.html?thread=2253142#t2253142"&gt;"Committing code often" discussion&lt;/a&gt;:&lt;br /&gt;It is ok to make mistakes, especially in the first "rapid-fire" version of the code.&lt;br /&gt;There is no shame in it.&lt;br /&gt;&lt;br /&gt;Even more: if you are not making any mistakes while coding - that means you are way too careful and are working much slower than you can.&lt;br /&gt;(That does not mean, of course, that you should intentionally do mistakes. Just take greater risks in order to improve speed of programming/coding until you start getting occasional mistakes).&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=dennisgorelik&amp;ditemid=125623" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
  <entry>
    <id>tag:dreamwidth.org,2016-12-24:2586985:122151</id>
    <link rel="alternate" type="text/html" href="https://dennisgorelik.dreamwidth.org/122151.html"/>
    <link rel="self" type="text/xml" href="https://dennisgorelik.dreamwidth.org/data/atom/?itemid=122151"/>
    <title>Uri parsing .NET bug</title>
    <published>2017-01-26T14:26:20Z</published>
    <updated>2017-01-26T15:07:34Z</updated>
    <category term="c#"/>
    <category term="microsoft"/>
    <category term="wtf"/>
    <category term="programming"/>
    <dw:security>public</dw:security>
    <dw:reply-count>2</dw:reply-count>
    <content type="html">Normally, in case of invalid input Uri() code throws UriFormatException. But with really weird input Uri(baseUri, Url) overload can produce NullReferenceException:&lt;pre&gt;[TestMethod]
[ExpectedException(typeof(NullReferenceException))]
public void UriFailureTest()
{
    new Uri(
        new Uri("https://jobs.web.cern.ch/content/cern-jobs-insight/what-are-we-doing-while-you%E2%80%99re-waiting"),
        "https:/jobs.web.cern.ch/content/cern-jobs-insight/what-are-we-doing-while-you%E2%80%99re-waiting");
}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=dennisgorelik&amp;ditemid=122151" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
</feed>
