Programação espartana ... Para que serve? [fechadas]

8

Estamos sendo forçados a usar a programação espartana em um projeto, para desgosto de todos. Então, entendo, ele torna os métodos muito curtos e lida com os casos simples primeiro. Mas será que realmente vale o preço do código parecido com algo do concurso Ofuscado C Code?

Você pode ver isso sendo útil para alguma coisa?

EpsilonVector
fonte
3
O que diabos é "programação espartana"? Você pode fornecer um link para nós, pessoas ignorantes?
DarenW
Você é "forçado a usar a programação espartana em um projeto" ?! Como isso funciona? Quero dizer, posso (até certo ponto) imaginar ser forçado a usar (um editor / um VSC / ...) em um projeto, mas como alguém pode ser forçado a usar uma certa abordagem?
Rook
16
Isto é Sparta!
Dean Harding
2
Se você acabar com o código que deve ser inscrito em um concurso ofuscado, apesar de qualquer eufemismo, está fazendo errado.
Tim Post
3
@EpsilonVector: Ah, então esse é um projeto da escola, não algo do "mundo real"? Então eu sugava e fazia o trabalho. Talvez o professor esteja tentando lhe ensinar que a adesão cega às regras dogmáticas geralmente é prejudicial à sua capacidade de trabalhar com eficiência. Ou talvez ele é apenas sádico ... Eu sei que muitos professores que são ;-)
Dean Harding

Respostas:

24

Muitos dos inquilinos da programação espartana me parecem boas práticas. Por exemplo, mantendo os métodos curtos, minimizando o escopo das variáveis, minimizando o número de parâmetros para um método ou métodos para uma classe etc. Essas são todas as coisas boas e exatamente o que você deve procurar.

Mas existem coisas como minimizar a contagem de caracteres , minimizar a contagem de tokens , ternarização (sério?), Etc. , que realmente não fazem sentido.

Penso que o meu principal problema é exemplificado por esta citação :

Porém, a programação espartana é mais do que apenas um estilo de codificação técnica, pois possui um único princípio subjacente e unificador - o minimalismo e a simplicidade levados a extremos.

Qualquer coisa "levada ao extremo" soa para mim.

Dean Harding
fonte
Alguém disse "programação"? : p
CesarGon
ternarização é interessante, no primeiro caso citado no artigo vinculado, é uma boa idéia, no segundo ... hmmm ok, eu deixaria isso para lá, mas levar a ternarização a extremos tolos (por exemplo, ternários aninhados) é, bem , boba.
ocodo 21/12
@Slomojo: O verdadeiro WTF nessa página é as seções sobre "ternarization Automatic" ...
Dean Harding
esse regex é incrível, desde que você analise cada ternarização, não vejo um grande problema com ele. Contanto que ainda sejam legíveis, tudo bem. - Como você diz, são os extremos (ou talvez mais corretamente, os extremistas) que seriam o problema.
ocodo 21/12
+1 em Qualquer coisa "levada ao extremo" soa para mim.
Sarawut Positwinyu
4

Agora isso parecia perturbadoramente familiar. Até a minimização dos tokens, embora não seja levada ao extremo. Prefiro usar fname do que filename, por exemplo, para saída, x para a entrada de dados, n para contagens, l para comprimentos e assim por diante. lx seria comprimento de x, ly comprimento de y, ... você entendeu.

Além disso, como muitas vezes manipulo grandes conjuntos de dados em aplicativos científicos, uso muito os recursos de índice em R. Quando escrevo todos esses índices, o código fere meus olhos. Então, o índice se torna id, ou mesmo apenas i.

Ainda mais, as estruturas de loop específicas em R (a família apply) geralmente exigem declaração de função na chamada apply. Nesses casos, eu sempre uso x, y, z, ... Essas funções costumam ser uma ou duas linhas, portanto fica claro de onde vem e não atrapalha a tela.

Não é uma coisa ruim, desde que você tenha algumas convenções de nomenclatura coerentes com o código completo e forneça comentários para explicar os nomes de variáveis ​​mais obscuros. No final, torna o código mais legível para mim do que um longo trem de camelos mancando pela tela.

Joris Meys
fonte
2
Concordo que variáveis ​​mais curtas costumam ser mais fáceis de ler do que nomes de variáveis ​​extremamente longos. Como eu disse na minha resposta, "qualquer coisa" levada ao extremo "toca um alarme para mim" e isso acontece nos dois sentidos. Seu objetivo final é maximizar a legibilidade, independentemente da contagem de caracteres em particular.
Dean Harding
1
Você diz "... isso torna o código mais legível para mim ..."; Eu coloco a ênfase em "para mim". Quando seu código é usado e mantido por outras dezenas de pessoas, suas variáveis ​​e lógica devem fazer sentido para eles , assim como você . Nesses casos, suas convenções e abreviações podem não ser tão claras. :-)
CesarGon
@ Cesário: É uma questão de documentar as convenções.
JORIS Meys
@ Dean Eu concordo completamente com isso. No entanto, percebo uma tendência para o outro extremo, notadamente em algumas linguagens de programação específicas. Jave vem à mente ...
Joris Meys
2

Aqui está um artigo que discute os benefícios da programação espartana

http://ssdl-wiki.cs.technion.ac.il/wiki/index.php/SendAnEmail_case_study

Demian Kasier
fonte
3
É uma piada, certo? Minimizar o tamanho do nome da variável, minimizar o número de variáveis ​​... nossa, me lembra dos meus dias no MSX!
CesarGon
Não estou aprovando :) mas o artigo explica melhor do que eu.
Demian Kasier
Eu sei eu sei.
CesarGon
1
Essas coisas mostradas no artigo não deveriam pertencer a toda ação de refatoração? Eu não sabia que isso se chamava "Programação espartana", mas geralmente tento me preocupar com essas coisas enquanto escrevo código (além do comprimento do nome da variável, mas não encontrei esse problema no artigo)
Felix Dombek
Sim, eu estou familiarizado com esse link, exceto que ele costumava não carregar quando tentávamos acessá-lo há algum tempo ... OK, então é menos insano do que os membros da minha equipe fizeram parecer, mas eu ainda estou do lado do CaesarGon nesse caso. ...
EpsilonVector
2

Essa é uma compactação de acentuação dos Cs.

  1. Correção
  2. Completude
  3. Compacidade

Ninguém se importa com o seu código, se não estiver correto.

Se o seu código não está completa (lida com todos os casos), então não são bugs.

Se não for compacto, você estará desperdiçando ciclos de memória ou de clock (otimizações do compilador de lado)

Observe que a ordem aqui é primordial. O programa mais compacto raramente está correto. POR EXEMPLO

void main() {
 return 1; 
}
EnabrenTane
fonte
Você pode tornar isso ainda mais compacto, se quiser. void main(){return 1;}
Aaron Franke
0

Uau, na verdade eu programava assim, não sabia que tinha um nome. Eu diria que isso beneficia a legibilidade, mas mais de uma maneira espacial ... o que significa que você não se perde em uma sopa de código, mesmo que tenha poucas linhas difíceis de ler.

No entanto, eu diria que, quando você se acostuma a certas construções, encontra o caminho mais fácil em menos tempo do que no início.

dukeofgaming
fonte
1
Há uma nova versão do projeto spartznizer, aqui: github.com/SpartanRefactoring/Spartanizer/wiki/Tutorial
Yossi Gil