The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:
我是软件开发中规则和纪律的忠实拥护者;例如,请参阅《你是黑客还是设计师?》。此外,我是纯正面向对象编程的狂热爱好者;例如,请参阅《一个好对象的七个美德》。我还是Zerocracy的联合创始人兼首席执行官,通过这家软件开发公司,我将我的纪律和干净设计的钦佩付诸实践。
我希望鼓励你分享我的激情——不仅通过阅读这个博客,还要以纪律的方式制作真正的开源软件。这个奖项是为那些敢于逆流而上,并且将质量看得高于一切的人而设立的。
发送给我你自己的项目以供审查,并参加比赛。
一个人最多可以提交三个项目。
提交截止日期为2015年9月1日已结束。
提交必须通过电子邮件发送至me@yegor256.com。我只需要您的GitHub登录名和仓库名称;我将检查提交历史记录以确保您是项目的主要贡献者。
我保留拒绝任何提交的权利,无需解释。
所有提交内容都将在此页面上发布(包括被拒绝的)。
结果将会在10月15日在此页面和通过电子邮件公布。
最好的项目将获得$4,096。
最佳的8个项目将获得任意JetBrains产品的1年开源许可证(每个项目一张许可证)。
最终决策将由我做出,并且不可商议(尽管我可能会邀请其他人帮助我做出正确的决策)。
每个项目必须是:
至少5,000行代码。
至少一年以上。
面向对象(这是我唯一理解的东西)。
最好的项目将会具备以下特点(更多相关信息):
“Continuous delivery.” (持续交付)
变更的可追溯性。
自文档化的源代码。
代码格式的严格规则。
什么不重要:
编程语言。我相信,任何语言,只要被正确使用,都可以应用于设计高质量的产品。
热点和趋势。即使你的项目只是另一个命令行参数解析器,它仍然有资格获得奖项。我不关心你的营销定位;品质才是最重要的。
顺便说一句,如果你想赞助这个奖项并增加奖金,请给我发电子邮件。
迄今为止已提交的项目共有158个(按提交顺序排列):
”
FagnerMartinsBrack/WebStories” 请将此段英文Markdown翻译成中文,不要翻译技术术语和专有名词。“
robertop/triumph4php” 请将此翻译为中文。”
blambeau/wlang” 的 Markdown 段落。
alf-tool/alf-core 由 @blambeau 制作。
”
siom79/japicmp” 的 Markdown 段落翻译为中文为:”
tunabrain/tungsten” translated to Chinese: “tunabrain/tungsten””
AdamsLair/duality” translated to Chinese is “AdamsLair/duality” (https://github.com/AdamsLair/duality).Pacmanfan/UVDLPSlicerController”
Bertram25/ValyriaTear” translated to Chinese is “Bertram25/ValyriaTear(https://github.com/Bertram25/ValyriaTear)”.”
odoepner/typepad” translates to “【odoepner/typepad】(https://github.com/odoepner/typepad)” in Chinese.vladmihalcea/flexy-pool请将以下Markdown段落从英文翻译成中文,不要翻译技术术语和专有名词。js-cookie/js-cookieby@FagnerMartinsBrackshould be translated as:
js-cookie/js-cookie 由 @FagnerMartinsBrack 创建。
jOOQ/jOOQ 由 @lukaseder 创建。
”
raphw/byte-buddy” translates to “raphw/byte-buddy” in Chinese.”
uniVocity/univocity-parsersby@jbax” translates to Chinese as “uniVocity/univocity-parsers由@jbax创建””
arnaudroger/SimpleFlatMapper” translates to Chinese as “arnaudroger/SimpleFlatMapper””
trade-manager/trade-manager” 请将此Markdown段落从英文翻译为中文,不要翻译技术术语和专有名词。”
ParaPenguin/morphix” translated into Chinese is “ParaPenguin/morphix”.”
tzaeschke/zoodb” translated into Chinese is “tzaeschke/zoodb”.”
tzaeschke/critbit“的英文翻译是:”tzaeschke/critbit””
praveendath92/MDroid” 的 Markdown 段落。”
DeqingSun/ESP8266-Dash-Button” translates to:
”DeqingSun/ESP8266-Dash-Button”
”
javamonkey/beetl2.0“的中文翻译为:”javamonkey/beetl2.0“(https://github.com/javamonkey/beetl2.0)。”
81813780/HandyTabBar” 的中文翻译是:”81813780/HandyTabBar””
xionghuiCoder/clearpool” translates to “xionghuiCoder/clearpool” in Chinese.”
android-cjj/ComicReader” can be translated to Chinese as “android-cjj/ComicReader(https://github.com/android-cjj/ComicReader)”.”
Dreampie/icedog” should be translated to Chinese as “Dreampie/icedog”.”
hujiaweibujidao/TinyWeibo” translates to “hujiaweibujidao/TinyWeibo(https://github.com/hujiaweibujidao/TinyWeibo)”.”
hujiaweibujidao/XingShan” translates to “hujiaweibujidao/XingShan(https://github.com/hujiaweibujidao/XingShan)”.”
hujiaweibujidao/WeChat4j” translates to “【hujiaweibujidao/WeChat4j】(https://github.com/hujiaweibujidao/WeChat4j)” in Chinese.”
beartung/tclip-android” translates to “beartung/tclip-android” in Chinese.”
beartung/insta-filter” translates to “【beartung/insta-filter】(https://github.com/beartung/insta-filter)” in Chinese.”
wewoor/ZBLOG“的中文翻译为:”wewoor/ZBLOG“。gulpjs/gulp由@contra创建”
joedayz/titanic-javaee7” 的中文翻译如下:”
TheCricket/Chisel-2” can be translated to Chinese as “TheCricket/Chisel-2”.“
ddasilva/scheme-droid” 请将此Markdown段翻译为中文,不要翻译技术术语和专有名词。”
chenjishi/SlideActivity” should be translated to Chinese as “chenjishi/SlideActivity”.”
yazeed44/MultiImagePicker“请将此Markdown段落从英文翻译成中文,不要翻译技术术语和专有名词。”
wbotelhos/raty” should be translated as “wbotelhos/raty” without translating the technical terms and proper nouns.”
miku-nyan/Overchan-Android” can be translated to Chinese as “miku-nyan/Overchan-Android”.chylex/Hardcore-Ender-Expansion请将此链接指向的 Markdown 段落从英文翻译为中文,不要翻译技术术语和专有名词。”
lionsoul2014/jcseg” translated into Chinese is “lionsoul2014/jcseg”.”
yfpeng/pengyifan-bioc” would be translated to Chinese as “yfpeng/pengyifan-bioc”.”
daimor/NBStudio” translated to Chinese is “daimor/NBStudio”.”
sytolk/TaxiAndroidOpen“的中文翻译为:”sytolk/TaxiAndroidOpen””
yaylas/AndroidFaceRecognizer” translates to “yaylas/AndroidFaceRecognizer” in Chinese.”
omgware/fluid-simulator-v2” should be translated as “omgware/fluid-simulator-v2”.”
wendykierp/JTransforms” translated to Chinese: “wendykierp/JTransforms”
请将上述Markdown段落从英文翻译成中文,不要翻译技术术语和专有名词。
”
subchen/jetbrick-template-2x” translated to Chinese is “subchen/jetbrick-template-2x(https://github.com/subchen/jetbrick-template-2x)”.”
subchen/snack-string” 的中文翻译为:”subchen/snack-string“。”
restorer/zame-haxe-particles” 请不要翻译技术术语和专有名词。”
mrzl/LeapMotionP5“的翻译”
relu91/niftyeditor“请将此句翻译成中文。
请将上述Markdown段落从英文翻译成中文,不要翻译技术术语和专有名词。
”
t-oster/VisiCut” translates to “t-oster/VisiCut” in Chinese.”
arnaudroger/SimpleFlatMapper” 的中文翻译为:”arnaudroger/SimpleFlatMapper””
Floens/Clover” in Chinese is “Floens/Clover”.”
chrisshayan/TechLooper” translated to Chinese is “chrisshayan/TechLooper”.”
bonigarcia/dualsub“的翻译为中文为”
blundell/WoodyFaceDetection” translated to Chinese is “blundell/WoodyFaceDetection”.”
blundell/QuickSand” 的中文翻译为:”blundell/QuickSand””
blundell/ArrowLogger” translates to “blundell/ArrowLogger” in Chinese.”
jmyrland/DriSMo” should be translated as “jmyrland/DriSMo” in Chinese as it contains technical terms and proper nouns that should not be translated.”
javaslang/javaslang” translates to Chinese as “javaslang/javaslang”.”
jasonycw/MemeCreator” should be translated to Chinese as “jasonycw/MemeCreator”.”
jasonycw/TyphoonTycoon” translated to Chinese would be “jasonycw/TyphoonTycoon“(jasonycw/TyphoonTycoon).”
ysc/QuestionAnsweringSystem“的意思是将Markdown段落从英语翻译成中文,不要翻译技术术语和专有名词。”
ysc/word“的中文翻译是什么?”
andot/hprose” translates to “andot/hprose” in Chinese.”
guikeller/jetty-runner” 的 Markdown 段落。h2oai/h2o-3由@srisatish创建。”
Feng14/MiniWeChat-Server” translates to “Feng14/MiniWeChat-Server” in Chinese.”
tianzhijiexian/ActivityOptionsICS” translates to “tianzhijiexian/ActivityOptionsICS(https://github.com/tianzhijiexian/ActivityOptionsICS)”.”
swanson/stringer” can be translated to Chinese as “swanson/stringer“(https://github.com/swanson/stringer).”
JayFang1993/DropDownMenu“请将此Markdown段落从英文翻译成中文,不要翻译技术术语和专有名词。”
AizazAZ/Android-Ultra-Photo-Selector” in Chinese is: “AizazAZ/Android-Ultra-Photo-Selector””
patilswapnilv/TerminalIDE” translates to “patilswapnilv/TerminalIDE” in Chinese.”
zhaoqp2010/andbase” translates to “zhaoqp2010/andbase(https://github.com/zhaoqp2010/andbase)” in Chinese.”
omry/banana” should be translated to Chinese as “omry/banana”.”
jackrex/AndroidCacheFoundation” translates to “jackrex/AndroidCacheFoundation” in Chinese.”
kaitoy/pcap4j” translates to “【kaitoy/pcap4j](https://github.com/kaitoy/pcap4j)】”.”
rgladwell/m2e-android” 请将此Markdown段落从英文翻译成中文,不要翻译技术术语和专有名词。”
scireum/parsii“的翻译为中文是”
scireum/sirius-kernel” translates to “scireum/sirius-kernel” in Chinese.yazeed44/ResizableView请将以下 Markdown 段落从英文翻译为中文,不要翻译技术术语和专有名词。”
yazeed44/GroceryShopping” 的翻译为中文是:”yazeed44/GroceryShopping””
MindMac/AndroidAppLog” translates to “【MindMac/AndroidAppLog](https://github.com/MindMac/AndroidAppLog)】” in Chinese.”
kpbird/chips-edittext-library” would be translated to Chinese as “kpbird/chips-edittext-library”.”
spiffyui/spiffyui” translated to Chinese is “spiffyui/spiffyui“(https://github.com/spiffyui/spiffyui)。”
conductor-framework/conductorby@ddavison” would be translated to Chinese as “conductor-framework/conductor由@ddavison””
ctron/package-drone” 请将此Markdown段落从英文翻译成中文,不要翻译技术术语和专有名词。”
markkerzner/FreeEed” 的中文翻译为:”markkerzner/FreeEed””
morris/lessql” translates to “morris/lessql” in Chinese.”
jitlogic/zorka“的中文翻译为请sdorra/angular-dashboard-framework请将以下的Markdown段落从英语翻译成中文,不要翻译技术术语和专有名词。”
iluwatar/java-design-patterns” translated to Chinese is “iluwatar/java-design-patterns(https://github.com/iluwatar/java-design-patterns)”.”
chesterbr/ruby2600” translates to “chesterbr/ruby2600” in Chinese.”
testinfected/molecule” can be translated to Chinese as “testinfected/molecule”.”
testinfected/simple-petstore“的中文翻译为:testinfected/simple-petstore。”
pchab/AndroidRTC” translates to “pchab/AndroidRTC” in Chinese.”
dolda2000/ashd” translated to Chinese is “dolda2000/ashd”.”
MaigoAkisame/MCPDict” 的 Markdown 段落,請翻譯成中文,不要翻譯技術術語和專有名詞。”
Ph1b/MaterialAudiobookPlayer” translated to Chinese is “Ph1b/MaterialAudiobookPlayer”.SVGKit/SVGKit由@adamgit创建。vertigo17/Cerberus由@bcivel创建。”
jaredsburrows/OpenQuartz” should be translated to Chinese as “jaredsburrows/OpenQuartz”.”
jaredsburrows/AndroidGradleTemplate” 的 Markdown 段落请翻译成中文,不要翻译技术术语和专有名词。”
vitalidze/traccar-web” translates to “vitalidze/traccar-web” in Chinese.”
ReikaKalseki/ChromatiCraft” translated to Chinese would be “ReikaKalseki/ChromatiCraft“(https://github.com/ReikaKalseki/ChromatiCraft)。”
ReikaKalseki/RotaryCraft” 请将此Markdown段落从英文翻译成中文,不要翻译技术术语和专有名词。”
ReikaKalseki/DragonAPI” translated to Chinese is “ReikaKalseki/DragonAPI”.
jOOQ/jOOX 由 @lukaseder 创建。
”
konsoletyper/teavm” should be translated as “konsoletyper/teavm” in Chinese as it consists of technical terms and a proper noun.citiususc/hipster请将以下Markdown段落从英语翻译成中文,不要翻译技术术语和专有名词。”
katzer/cordova-plugin-email-composer” 请将此Markdown段落从英文翻译为中文,不要翻译技术术语和专有名词。”
nivdul/actitracker-cassandra-spark” translated to Chinese: “nivdul/actitracker-cassandra-spark””
LuckyJayce/ViewPagerIndicator” translates to “【LuckyJayce/ViewPagerIndicator】” in Chinese.”
xvik/dropwizard-guicey” 的中文翻译为:”xvik/dropwizard-guicey””
mbosecke/pebble” can be translated to Chinese as “mbosecke/pebble(https://github.com/mbosecke/pebble)”.inklabs/kommerce-core由@pdt256创建。”
elchris/easysql” 的中文翻译是什么?checkstyle/checkstyle由@romani创建。”
mifmif/mspider“请将此Markdown段落从英文翻译成中文,不要翻译技术术语和专有名词。”
KeldOelykke/FailFast” 的 Markdown 段落翻译成中文为:”KeldOelykke/FailFast””
trautonen/coveralls-maven-plugin” 的 Markdown 段落的中文翻译为:”trautonen/coveralls-maven-plugin””
mystilleef/eclipse4-smartsave” translated to Chinese is “mystilleef/eclipse4-smartsave(https://github.com/mystilleef/eclipse4-smartsave)”.”
kbilsted/StatePrinter” 的翻译为中文是:kbilsted/StatePrinter
js-cookie/java-cookie 由@FagnerMartinsBrack 编写。
”
Suseika/inflectible” 的中文翻译为:”Suseika/inflectible“。”
mp911de/lettuce” should be translated as “mp911de/lettuce”.”
mafagafogigante/dungeon” translates to “mafagafogigante/dungeon” in Chinese.
colonB/Mixer 由 @kkashpur 创建。
colonB/Dorm由@kkashpur创建。
10月4日:几周前,我要求与我一起工作的三个人检查此列表中的每个项目,并提供他们的反馈意见。他们给我发来了三个纯文本文件。这里有它们的合并文件,几乎没有做任何更正:award-2015.txt(你可以在那里找到你的项目)。根据他们的意见,我决定选择以下12个项目进行更详细的审查(按字母顺序排列):
”
checkstyle/checkstyle” 的中文翻译是:”checkstyle/checkstyle””
citiususc/hipster” translates to “citiususc/hipster” in Chinese.”
gulpjs/gulp” 的 Markdown 段落请翻译成中文。请不要翻译技术术语和专有名词。kaitoy/pcap4jtranslates tokaitoy/pcap4j.raphw/byte-buddy(added on Oct-5)
raphw/byte-buddy(于10月5日添加)
”
gvlasov/inflectible” translates to “gvlasov/inflectible(https://github.com/gvlasov/inflectible)” in Chinese.”
testinfected/molecule” translates to “testinfected/molecule” in Chinese.”
trautonen/coveralls-maven-plugin” translated to Chinese is “trautonen/coveralls-maven-plugin” (链接).”
wbotelhos/raty” should be translated as “wbotelhos/raty”.”
xvik/guice-persist-orient“请不要翻译技术术语和专有名词。
我会尽快审查它们。获胜者将于10月15日公布。
10月5日:我收到了raphw/byte-buddy的作者的电子邮件,要求我重新考虑对这个项目的决定。我快速查看了项目被过滤掉的原因,并决定将其列入入围名单。顺便说一下,如果你们中的任何人认为自己的项目被错误地排除在外,请随时给我发电子邮件。
10月11日:今天我分析了所有12个项目。它们全部都是非常好的项目,所以为了找到最好的一个,我专注于它们的缺点而非优点。以下是我初步发现的情况。
coala-analyzer/coala(14K Python代码行数,160K代码行数)
有全局函数,例如
get_language_tool_results和DictUtilities。这在面向对象编程中绝对是一个糟糕的想法。类
Constants是一个糟糕的想法。在运行时检查对象类型是个不好的主意,例如
ClangCountVectorCreator.py。cindex.py有什么问题?代码有近3200行,太多了。静态分析不是构建/发布流程中的强制步骤。这就是为什么我认为代码格式不一致,有时相当丑陋的原因。例如,
pylint报告了数百个问题。(更新:使用了scrutinizer,但我仍然相信本地使用pylint会严重提高代码质量)有些方法有文档,而有些没有。我不明白其中的逻辑。如果所有方法都有文档就太好了。另外,并不是所有的类都有文档。
Score: 5
checkstyle/checkstyle (83K Java LoC, 553K HoC)
【checkstyle/checkstyle](https://github.com/checkstyle/checkstyle)(83K Java LoC,553K HoC)
有很多实用类,是面向对象编程中的一种不好的事情。它们甚至被分组到一个特殊的
utils包中,这是一个非常糟糕的想法。设置器和获取器随处可见,以及不可变类,这些实际上不是面向对象编程的一部分,例如
DetectorOptions。NULL在许多地方被积极使用,这是一个严重的反模式。我找到了五个
.java文件,每个文件中有超过1000行的代码,例如ParseTreeBuilder.java中有2500+行。有不同的贡献者对主分支进行了直接提交,其中一些没有与任何问题关联起来。很难理解为什么进行了这些提交。例如,看看这个
7c50922。是否有相关讨论?是谁做出了决定?一点都不清楚。“Releases are not documented at all.”
【发布版本】(https://github.com/checkstyle/checkstyle/releases)根本没有记录。
发布流程不是自动化的。至少我在代码库里没有找到任何发布脚本。
Score: 3
”citiususc/hipster(5K Java LoC,64K HoC)”
有一些公共的静态方法和实用类,例如这个具有有趣名字的
F。to use
NULLas a placeholder value or to represent the absence of a value. Instead, it is recommended to use more descriptive alternatives, such asNonein Python ornilin Ruby.JavaDoc文档不一致,有些方法有文档,而其他方法没有。
并不是所有的提交都与工单相关,例如,看看这个:
8cfa5de。更改直接提交到
master分支,根本不使用拉取请求。我没有找到自动发布的流程。我找到了一个用于定期快照部署到Bintray的流程,但是关于正式发布呢?是手动完成的吗?
没有静态分析,这就是为什么代码有时看起来很乱。
单元测试的数量相当少。除此之外,我没有找到任何地方发布的真实代码覆盖报告。
Score: 4
gulpjs/gulp (700 JS LoC)
【gulpjs/gulp](https://github.com/gulpjs/gulp)(700 JS LoC)
- Score: 0
kaitoy/pcap4j (42K LoC, 122K HoC)
kaitoy/pcap4j (42K 行代码,122K 字符)
NULL在可变对象中使用,例如在AbstractPcapAddress中使用;这是一个不好的主意。有太多的
static方法和变量。它们简直无处不在。甚至有一个名为pcap4j-packetfactory-static的模块,充满了带有静态方法的“类”。JavaDoc文档不一致,有时甚至不完整,请查看此链接作为例子。
只有几个问题和六个拉取请求。提交与问题没有关联。几乎没有任何变更的可追踪性。
发布流程未自动化,releases 未有记录。
没有静态分析,所以代码有时看起来很乱
Score: 3
raphw/byte-buddy (84K LoC, 503K HoC)
【raphw/byte-buddy](https://github.com/raphw/byte-buddy)(84K行代码,503K高度代码)
有很多
public static方法和属性。我意识到这可能是在Java中处理问题域的唯一方式,但还是…instanceof经常被使用,但在面向对象编程中,这是一种不好的做法。虽然我理解在某些情况下问题域可能需要它,但是还是……大多数提交直接在主分支上进行,没有拉取请求或票证,这就是为什么它们的可追溯性被破坏了。
发布程序不是自动化的(我没有找到脚本)。
Score: 5
”subchen/snack-string(1K LoC,2K HoC)”
- Score: 0
gvlasov/inflectible (5K LoC, 36K HoC) 的中文翻译为:gvlasov/inflectible(5千行代码,36千行其他代码)。
- Score: 10
testinfected/molecule (10K LoC, 43K HoC)
有一些类中有设置器(setters)和访问器(getters),尽管它们采用了不同的命名约定,例如
Request和Response。大多数
.java文件没有任何JavDoc块,并且它们看起来是一致的,但突然间,一些文件确实有文档,例如WebServer。问题并不多,而且大多数提交无法追溯到其中任何一个问题,例如
b4143a0——为什么进行这个提交?不清楚。此外,几乎没有拉取请求。看起来作者只是向主分支提交。发布流程没有记录/自动化。我找不到它。此外,releases也没有记录。
静态分析是不存在的。
Score: 6
trautonen/coveralls-maven-plugin (4.5K LoC) should not be translated as it consists of technical terms and proper nouns.
- Score: 0
”wbotelhos/raty(8.7千行代码,63千字符)”
有全局函数,例如在
helper.js中。jasmine.js有2400行代码,这太多了。我不明白为什么
.html文件与.js文件放在同一个目录中,例如run.html。并非所有的更改都可以追溯到问题,比如
0a233e8。项目中的问题并不多,只有一些拉取请求。发布流程不是自动化的(至少我没有找到任何关于它的文档)。
没有静态分析
没有单元测试
Score: 2
xvik/guice-persist-orient (17K LoC, 54K HoC) should not be translated as it contains technical terms and proper nouns.
依赖注入被积极使用,我认为这在面向对象编程中通常是一个不好的想法。但在这个项目中,我理解这是问题领域所要求的。无论如何…
只有少量问题和几乎没有拉取请求,而且提交无法追溯到问题,例如这个:
e9c8f79没有静态分析(使用一部分Checkstyle、PMD和FindBugs检查)。
Score: 5
我主要关注反模式,这是我们应尽量避免的第一个和最可怕的错误。例如,null的存在比自动发布程序的缺失更严重地影响了得分。
10月15日:因此,我们从提交到竞赛的158个项目中选出了以下最佳项目:
testinfected/molecule的Markdown段落coala-analyzer/coala请将上述的 Markdown 段落从英文翻译成中文,不要翻译技术术语和专有名词。xvik/guice-persist-orient请,将此Markdown段落从英文翻译成中文,不要翻译技术术语和专有名词。raphw/byte-buddy请将以下的 Markdown 段落从英文翻译成中文,不要翻译技术术语和专有名词。checkstyle/checkstyle请将上述Markdown段落从英文翻译成中文,不要翻译技术术语和专有名词。kaitoy/pcap4j请将以下Markdown段落从英语翻译成中文,不要翻译技术术语和专有名词。
恭喜@gvlasov获胜者!这是您的徽章:
将这段代码放入GitHub的README文件中:
所有八个项目将获得一个 JetBrains 产品的一年免费单用户许可证。我会给大家发电子邮件,然后我们会商讨如何进行转让。
感谢大家的参与!明年再见。
Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-05 at 22:00
