
Belajarlah mengidentifikasi mereka. Kembangkan kebiasaan untuk menghindarinya.
Tujuan artikel ini bukan untuk menghasut pendatang baru untuk kesalahan khas, tetapi untuk mengajar mereka untuk mengidentifikasi dan menghindari mereka. Urutan daftar adalah acak.
Dari penerjemah
Kadang-kadang bisa sulit untuk menjelaskan hal-hal sederhana dengan kata-kata sederhana: mengapa menggunakan git, apa trik enkapsulasi, mengapa menulis tes, bagaimana merencanakan kode Anda, refactor orang lain, dll. Tampaknya bagi saya bahwa artikel ini dengan kompak menyusun aspek-aspek penting βkemanusiaanβ dari pemrograman. Sesuatu seperti kode etik, pedoman dan motivator dalam membuat keputusan terkait penulisan kode.
Tidak peduli betapa lucu kedengarannya, saya telah mengerjakan teks ini sejak pertengahan Maret, mencoba menemukan bahasa yang tepat dan membuatnya lebih mudah untuk dipahami. Dia berkelahi beberapa hari dengan editor Habr. Karena itu, jika Anda menemukan kekurangan, tolong jangan salahkan saya karena kelalaian, tetapi beri tahu saya, saya akan segera memperbaikinya. Saya berpikir untuk menghias artikel dengan gambar, tetapi memutuskan bahwa ini hanya akan meningkatkannya ke dimensi yang benar-benar tidak senonoh. Selamat membaca.
1) Pemrograman tanpa perencanaan2) Perencanaan yang berlebihan3) Meremehkan pentingnya kualitas kode4) Pegang keputusan pertama5) Jangan mundur6) Jangan google7) Jangan gunakan enkapsulasi8) Merencanakan yang tidak diketahui9) Menggunakan struktur data yang tidak tepat10) Memburuk kode11) Mengomentari hal-hal yang jelas12) Jangan menulis tes13) Untuk berpikir, jika sesuatu bekerja, maka itu dilakukan dengan benar14) Jangan mempertanyakan kode yang ada15) Obsesi dengan praktik terbaik16) Obsesi Kinerja17) Jangan fokus pada pengguna akhir18) Jangan memilih alat yang tepat19) Kesalahpahaman bahwa masalah kode menyebabkan masalah data20) Penemuan roda21) Sikap yang tidak benar terhadap inspeksi kode22) Tidak menggunakan sistem kontrol versi23) Penyalahgunaan negara bersama24) Sikap yang salah terhadap kesalahan25) Jangan istirahat1) Pemrograman tanpa perencanaan
Konten berkualitas tidak dibuat "pada lutut", tetapi membutuhkan kerja menyeluruh. Kode program tidak terkecuali.
Kode yang baik harus melalui langkah-langkah berikut:
Idenya. Penelitian Perencanaan Ejaan Verifikasi UbahMasing-masing poin ini perlu diberikan usaha yang cukup.
Pemula cenderung kode tanpa berpikir terlebih dahulu. Ini mungkin bekerja pada aplikasi mandiri kecil. Tapi pada umumnya bisa berubah menjadi tragedi.
Sebelum Anda mengatakan sesuatu, Anda memikirkan kata-katanya sehingga Anda tidak malu nantinya. Demikian pula, hindari kode yang salah dipahami yang suatu hari nanti akan memalukan. Dan kata-kata dan kode adalah refleksi dari pikiran Anda.
βJika Anda marah, hitung sampai 10 sebelum Anda berbicara. Jika sangat marah, maka sampai 100. " (Thomas Jefferson)
Untuk kasus kami, ini dapat diulangi sebagai berikut:
βSaat memeriksa kode, hitung sampai 10 sebelum menulis ulang 1 baris. Jika tidak ada tes untuk kode ini, maka hingga 100 ".
Pemrograman adalah studi 90% dari kode yang ada dan modifikasinya melalui bagian-bagian kecil yang mudah diuji yang sesuai dengan keseluruhan sistem. Menulis kode itu sendiri hanya 10% dari pekerjaan programmer.
Pemrograman tidak hanya menulis baris kode, tetapi kreativitas berdasarkan logika yang perlu dikembangkan sendiri.
2) Perencanaan yang berlebihan
Merencanakan sebelum menyelam ke dalam pengkodean adalah hal yang baik. Tetapi bahkan hal-hal baik dapat menyakiti Anda jika Anda bertindak terlalu jauh dengannya. Bahkan air dapat diracuni jika Anda minum terlalu banyak.
Jangan mencari rencana yang sempurna. Ini tidak ada di dunia pemrograman. Carilah rencana yang cukup baik untuk memulai. Setiap rencana akan berubah, tetapi itu akan memaksa Anda untuk mematuhi struktur dalam kode yang akan memudahkan pekerjaan Anda di masa depan.
Perencanaan linear seluruh program βdari A ke Zβ (dengan metode waterfall) tidak cocok untuk sebagian besar produk perangkat lunak. Pengembangan melibatkan umpan balik dan Anda akan terus-menerus menghapus dan menambahkan fungsionalitas, yang tidak dapat diperhitungkan dalam βperencanaan air terjunβ. Beberapa item berikut harus direncanakan. Dan setiap yang baru harus dimasukkan dalam rencana hanya setelah adaptasi yang fleksibel dengan kenyataan (Agile).
Perencanaan harus didekati dengan sangat bertanggung jawab, karena kekurangan dan kelebihannya dapat merusak kualitas kode. Dan jangan sampai Anda mempertaruhkan kualitas kode.
3) Meremehkan pentingnya kualitas kode
Jika Anda dapat fokus hanya pada satu hal ketika menulis kode, maka itu harus mudah dibaca. Kode tidak terbaca yang tidak bisa dipahami bukan hanya sampah, tetapi sampah yang tidak dapat didaur ulang.
Lihatlah program sebagai komponen yang berkomunikasi melalui kode. Kode yang buruk adalah komunikasi yang buruk.
"Tulis kode Anda seolah-olah itu akan disertai oleh seorang psikopat agresif yang tahu di mana Anda tinggal." (John Woods)
Bahkan "hal-hal kecil" itu penting. Jika Anda tidak sistematis menggunakan huruf kapital dan indentasi, maka Anda perlu mengambil lisensi programmer.
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)
. . -, . , , , . .