關(guān)于軟件設(shè)計(jì),我們都錯(cuò)了
我們都錯(cuò)了。當(dāng)開(kāi)始討論觀點(diǎn)時(shí),這就是事情本身的樣子。每個(gè)人有他或她自己的信念,它由該領(lǐng)域的多年經(jīng)驗(yàn)、令人沮喪的代碼、書(shū)、成功等等形成。所有這些背景是如何歸結(jié)為一個(gè)統(tǒng)一理論的?它們只是還不可以。
你一直被告訴在工作中找到正確的工具。但什么是正確的工具呢?你決定的,根據(jù)你的實(shí)踐知識(shí)。
我愛(ài)Ruby因?yàn)槲矣X(jué)得它自然,但是其他開(kāi)發(fā)者討厭這種語(yǔ)言。我喜歡干凈的代碼,其他人不關(guān)心。我贊成RSpec和Capybara,其他人喜歡Test::Unit。CoffeeScript 和 plain JavaScript, ERb 和 HAML,Postgres 和 MySQL. Vim 或 Emacs? Mac 或 Linux? TDD 或 不用TDD, 任何一個(gè)呢?
有了這些分割,我們不能把人們從教條中解放出來(lái),但僅僅產(chǎn)生了一個(gè)相反觀點(diǎn)的粉絲。
相對(duì)論也可以被應(yīng)用到軟件設(shè)計(jì)。我需要多少級(jí)的間接尋址才能完成一定的工作?好吧,看情況。它取決于各種不錯(cuò)的理由,但是主要在于你的判斷。對(duì)你來(lái)說(shuō)是優(yōu)秀的,然而對(duì)于其他人卻是讓人失望的。
我們可以討論折衷方案,但是請(qǐng)不要把你的成功產(chǎn)品當(dāng)做你在代碼方面是正確的資格。
我在Litmus工作,一家盈利豐厚的公司。如果我把下面的代碼放在一個(gè)模板里,你會(huì)因?yàn)槲业膯T工就發(fā)現(xiàn)它是合理的嗎?
- <%
- require 'mysql2'
- client = Mysql2::Client.new({
- host: 'host',
- username: 'username',
- database: 'database'})
- rows = client.query(%{SELECT * FROM previews
- ORDER BY created_at DESC
- LIMIT 5})
- %>
- <ul>
- <% rows.each do |row| %>
- <li><%= row.fetch(:title) %></li>
- <% end %>
- </ul>
嗨,是的!誰(shuí)需要那些像控制器和ORM的高級(jí)抽象,誰(shuí)完全需要框架!那種結(jié)構(gòu)是為太空架構(gòu)師(architecture astronauts)準(zhǔn)備的。離開(kāi)我的草坪!看看我,我是個(gè)實(shí)用主義者。我通過(guò) 破壞了我工作的億萬(wàn)富翁的軟件 證明了這一點(diǎn)。
這不是一個(gè)論據(jù),只是廢話。
原文地址:http://lucaguidi.com/2014/04/28/we-are-all-wrong-about-software-design.html
譯文鏈接:http://www.labazhou.net/2014/04/we-are-all-wrong-about-software-design/