
Lerne sie zu identifizieren. Gewohnheiten entwickeln, um sie zu vermeiden.
Der Zweck dieses Artikels besteht nicht darin, Neuankömmlinge zu typischen Fehlern anzuregen, sondern sie zu lehren, sie zu identifizieren und zu vermeiden. Die Reihenfolge der Auflistung ist zufällig.
Vom Ăśbersetzer
Manchmal kann es schwierig sein, scheinbar banale Dinge in einfachen Worten zu erklären: Warum Git verwenden, was ist der Kapselungstrick, warum Tests schreiben, wie Sie Ihren Code planen, den eines anderen umgestalten usw. Es schien mir, dass dieser Artikel wichtige „humanitäre“ Aspekte der Programmierung kompakt zusammenfasste. So etwas wie ein Ethikkodex, eine Richtlinie und ein Motivator für Entscheidungen im Zusammenhang mit dem Schreiben von Code.
Egal wie lustig es klingt, ich arbeite seit Mitte März an diesem Text, um die richtige Sprache zu finden und das Verständnis zu erleichtern. Er kämpfte ein paar Tage mit dem Habr-Redakteur. Wenn Sie also Mängel feststellen, machen Sie mich bitte nicht für Fahrlässigkeit verantwortlich, sondern benachrichtigen Sie mich, ich werde diese umgehend korrigieren. Ich dachte daran, den Artikel mit Bildern zu dekorieren, entschied aber, dass dies ihn nur auf völlig unanständige Dimensionen aufblasen würde. Viel Spaß beim Lesen.
1) Programmieren ohne Planung2) Übermäßige Planung3) Unterschätzen der Bedeutung der Codequalität4) Erfassen Sie die erste Entscheidung5) Ziehen Sie sich nicht zurück6) Nicht googeln7) Verwenden Sie keine Kapselung8) Das Unbekannte planen9) Verwenden unangemessener Datenstrukturen10) Verschlechtern Sie den Code11) Offensichtliche Dinge kommentieren12) Schreiben Sie keine Tests13) Wenn etwas funktioniert, ist es richtig gemacht14) Stellen Sie den vorhandenen Code nicht in Frage15) Besessenheit von Best Practices16) Leistungsbesessenheit17) Konzentrieren Sie sich nicht auf den Endbenutzer18) Wählen Sie nicht die richtigen Werkzeuge aus19) Missverständnis, dass Codeprobleme Datenprobleme verursachen20) Erfindung des Rades21) Unsachgemäße Einstellung zur Codeprüfung22) Keine Versionskontrollsysteme verwenden23) Missbrauch des gemeinsamen Staates24) Falsche Einstellung zu Fehlern25) Nicht ausruhen1) Programmieren ohne Planung
Qualitätsinhalte werden nicht „auf dem Knie“ erstellt, sondern erfordern gründliche Arbeit. Programmcode ist keine Ausnahme.
Guter Code sollte die folgenden Schritte durchlaufen:
Die Idee. Forschung. Planung. Rechtschreibung Überprüfung Ändern.Jeder dieser Punkte muss ausreichend belastet werden.
Anfänger neigen dazu, ohne vorheriges Nachdenken zu codieren. Dies funktioniert möglicherweise bei kleinen eigenständigen Anwendungen. Aber im Großen und Ganzen kann es zu einer Tragödie werden.
Bevor Sie etwas sagen, denken Sie über die Worte nach, damit Sie sich später nicht schämen. Vermeiden Sie in ähnlicher Weise schlecht konzipierten Code, für den es eines Tages peinlich sein wird. Und Wörter und Code spiegeln Ihre Gedanken wider.
„Wenn Sie wütend sind, zählen Sie bis 10, bevor Sie sprechen. Wenn Sie sehr wütend sind, sind es bis zu 100 ". (Thomas Jefferson)
In unserem Fall kann dies wie folgt umformuliert werden:
„Wenn Sie den Code überprüfen, zählen Sie bis 10, bevor Sie eine Zeile neu schreiben. Wenn es keine Tests für diesen Code gibt, dann bis zu 100 ”.
Bei der Programmierung handelt es sich um eine 90% ige Untersuchung des vorhandenen Codes und seiner Änderung durch kleine, leicht zu testende Teile, die in das Gesamtsystem passen. Das Schreiben von Code selbst macht nur 10% der Arbeit eines Programmierers aus.
Beim Programmieren werden nicht nur Codezeilen geschrieben, sondern Kreativität auf der Grundlage von Logik, die in sich selbst entwickelt werden muss.
2) Übermäßige Planung
Planen Sie vor dem Eintauchen in die Codierung ist eine gute Sache. Aber auch gute Dinge können dich verletzen, wenn du mit ihnen zu weit gehst. Sogar Wasser kann vergiftet werden, wenn Sie zu viel davon trinken.
Suchen Sie nicht nach dem perfekten Plan. Dies gibt es in der Programmierwelt nicht. Suchen Sie nach einem Plan, der gut genug ist, um loszulegen. Jeder Plan wird sich ändern, aber Sie müssen sich an eine Struktur im Code halten, die Ihre zukünftige Arbeit erleichtert.
Die lineare Planung des gesamten Programms „von A bis Z“ (nach der Wasserfallmethode) ist für die meisten Softwareprodukte nicht geeignet. Die Entwicklung beinhaltet Feedback und Sie werden ständig Funktionen entfernen und hinzufügen, die bei der „Wasserfallplanung“ nicht berücksichtigt werden können. Die folgenden Punkte sollten geplant werden. Und jeder neue sollte erst nach flexibler Anpassung an die Realität (Agile) in den Plan aufgenommen werden.
Die Planung muss sehr verantwortungsbewusst angegangen werden, da ihr Mangel und ihr Übermaß die Qualität des Codes beeinträchtigen können. Und auf keinen Fall sollten Sie die Qualität des Codes riskieren.
3) Unterschätzen der Bedeutung der Codequalität
Wenn Sie sich beim Schreiben von Code nur auf eine Sache konzentrieren können, sollte dies Lesbarkeit sein. Ein unverständlicher unlesbarer Code ist nicht nur Müll, sondern Müll, der nicht recycelt werden kann.
Betrachten Sie das Programm als Komponenten, die ĂĽber Code kommunizieren. Schlechter Code ist schlechte Kommunikation.
"Schreiben Sie Ihren Code so, als wĂĽrde er von einem aggressiven Psychopathen begleitet, der weiĂź, wo Sie leben." (John Woods)
Auch die „kleinen Dinge“ sind wichtig. Wenn Sie unsystematisch Großbuchstaben und Einrückungen verwenden, müssen Sie die Programmiererlizenz entfernen.
tHIS is
WAY MORE important
than
you think
. 80 . (ESLint, Prettier js).
. , . 10 – .
. . .
, , . , , , .
“ : ”. ( )
. - 12, :
const monthsInYear = 12;
. , .
. . , . . – , .
“ , , ”. ( )
. , , . , .
.
4)
, , , . , , , . , , .
, , . , , .
“ : 1) , , , ; 2) , ”. ( )
5)
– . , . “ ” , .
. – . , . Git , .
, . .
6)
, , - . , .
. , , . , , .
– . , .
, :
“, , – ”.
7)
, . .
, . , . , . , .
. ,
,
,
.
. – . , – .
, , . , “ ”. .
,
(High Cohesion and Low Coupling). , , – .
8)
, : “ …” , . .
, . , - .
, . , , .
“ — ”. ( )
9)
. – . .
, , .
: “ !”. .
?
– .
:
[{id: 1, title: "entry1"}, {id: 2, title:"entry2"}, .... ]
:
{ 1: {id: 1, title: "entry1"}, 2: {id: 2, title:"entry2"}, ....}
, , . , . , push, pop, shift, unshift, , .
, , . , , .
?
, . , 2 .
. , .
10)

, . - . . . . — , -. , , , , . , .
, :
, , . , , . , .
, :
, , : “ ?” “”.
if , , . – : ?
if:
function isOdd(number) {
if (number % 2 === 1) {
return true;
} else {
return false;
}
}
if:
function isOdd(number) {
return (number % 2 === 1);
};
11)
. , .
, :
// This function sums only odd numbers in an array
const sum = (val) => {
return val.reduce((a, b) => {
if (b % 2 === 1) { // If the current number is odd
a+=b; // Add current number to accumulator
}
return a; // The accumulator
}, 0);
};
:
const sumOddValues = (array) => {
return array.reduce((accumulator, currentNumber) => {
if (isOdd(currentNumber)) {
return accumulator + currentNumber;
}
return accumulator;
}, 0);
};
. : “ ”, “ ”. , :
// create a variable and initialize it to 0
let sum = 0;
// Loop over array
array.forEach(
// For each number in the array
(number) => {
// Add the current number to the sum variable
sum += number;
}
);
, . — .
12)
, , – .
, . -, - . , . , , . , - , , .
, , - . .
, . (test-driven development, TDD) . , , .
TDD , , , .
13) , - ,
, . ?
const sumOddValues = (array) => {
return array.reduce((accumulator, currentNumber) => {
if (currentNumber % 2 === 1) {
return accumulator + currentNumber;
}
return accumulator;
});
};
console.assert(
sumOddValues([1, 2, 3, 4, 5]) === 9
);
. . ?
, . .
1
. , ? .
TypeError: Cannot read property 'reduce' of undefined.
:
.
.
, . , :
TypeError: Cannot execute function for empty list.
, 0? , - , .
2
. , ? :
sumOddValues(42);
TypeError: array.reduce is not a function
, array.reduce — . array (), ( 42), . , 42.reduce — . :
: 42 - , .
1 2 , . , . , , ?
sumOddValues([1, 2, 3, 4, 5, -13]) // => still 9
-13 ? ? ? “ ”? . , , , , , , .
“ . ” — , .
3
. . .
sumOddValues([2, 1, 3, 4, 5]) // => 11
2 , . , reduce initialValue, . . , .
14)
- , , . , , .
, , , .
, . .
:
, — , . . .
git blame, .
, , . , . .
15)
“ ” , , « ».
“ ” . .
, “ ” . , . “ ”, , .
-, - , - , - “ ”. , , , .
16)
“ – ( )”. , 1974
, .
“ ”, . , , .
, , . , Node.js .
.
17)
, ? , . ? . ?
. , , . , . , .
18)
. - , . . , , 5.0.
, – .
, “” . .
, . .
. , . , .
19) ,
— . – , .
. , . , . , .
, , , .
? : , , (). , .
.
NOT NULL , . , .
UNIQUE . .
CHECK , , 0 100.
PRIMARY KEY . .
FOREIGN KEY , .
–
. , , , , .
20)
. . .
, , , , . , , , . .
- . . . “ ” . (open source), , , .
, , . - .
shuffle lodash, , lodash.
21) (code review)
, . , .
. . . . .
, – , – .
-. , , , . , .
22) (Git)
/, Git.
, . — . . , , .
, . . , , .
, . , . .
– . , . , , , , .
, , , .
bisect, , .
, , :
- (staging changes)
- (patching selectively)
- (resetting)
- (stashing)
- (amending)
- (applying)
- (diffing)
- (reversing)
, , . Git , .
23) (shared state)
.
. . , , . , , . , . .
, ( ). (Race conditions). , . . . .
24)
– . , . , – .
– . , , , .
– . .
25)
. . -, . , , , . .