Гэр / Skype / Програмчлалд сайн кодын шалгуур. PHP програмчлалын дүрэм (14 дүрэм) Програмчлалын дүрэм

Програмчлалд сайн кодын шалгуур. PHP програмчлалын дүрэм (14 дүрэм) Програмчлалын дүрэм

Өнөөдөр бид код хэрхэн харагдах ёстой талаар ярих болно, энэ нь үзэсгэлэнтэй, унших боломжтой код шаарддаг.

Хөтөлбөрийг машинаар гүйцэтгэдэг хэдий ч програмын кодыг хүмүүс болон хүмүүст зориулж бичдэг - өндөр түвшний програмчлалын хэл нь хүн унших боломжтой синтакс, тушаалуудтай байдаг нь тохиолдлын хэрэг биш юм. Орчин үеийн програм хангамжийн төслүүдийг програмистуудын бүлгүүд боловсруулж, заримдаа зөвхөн оффисын талбайгаар төдийгүй тив, далайгаар тусгаарлагдсан байдаг. Аз болоход, технологийн хөгжлийн түвшин нь ажил олгогчдын байршлаас үл хамааран шилдэг хөгжүүлэгчдийн ур чадварыг ашиглах боломжийг олгодог. Хөгжлийн ийм хандлага нь кодын чанар, ялангуяа унших боломжтой, ойлгомжтой байдалд ноцтой шаардлага тавьдаг.

Кодын чанарын шалгуурын олон алдартай аргууд байдаг бөгөөд бараг ямар ч хөгжүүлэгч эрт орой хэзээ нэгэн цагт үүнийг мэдэх болно. Жишээлбэл, KISS (Keep It Simple, Stupid!) дизайны зарчмыг баримталдаг програмистууд байдаг. Энэхүү хөгжлийн арга нь нэлээд шударга бөгөөд хүндэтгэлтэй хандахаас гадна тусгадаг бүх нийтийн дүрэмсайн код - энгийн, ойлгомжтой байдал. Гэсэн хэдий ч энгийн байдал нь хязгаартай байх ёстой - програмын дараалал, кодыг унших чадвар нь хялбаршуулсаны үр дүн байх ёсгүй. Энгийн байдлаас гадна хэд хэдэн энгийн дүрмүүд байдаг. Мөн тэд хэд хэдэн асуудлыг шийддэг.

  • Туршилт, дибаг хийх замаар кодын хялбар хамрах хүрээг хангана. Нэгжийн тест гэдэг нь модуль, өөрөөр хэлбэл програмын нэг хэсэг болох функц, ангиудыг турших үйл явц юм. Хөтөлбөрийг бүтээхдээ хөгжүүлэгч код бичиж эхлэхээс эхлээд туршилт хийх боломжийг авч үзэх ёстой.
  • Кодын ойлголтыг хөнгөвчлөх, програмыг ашиглах. Энэ нь логик нэршил, сайн интерфэйс, хэрэгжилтийн хэв маягаар хөнгөвчилдөг.
  • Хяналтын хялбар байдлыг хангах. Хөтөлбөрийн сайтар бодож, хэрэгжүүлсэн бүтэц нь хөтөлбөрийн үйл ажиллагаатай холбоотой асуудлыг шинэ хэлбэрээр шийдвэрлэх боломжийг олгодог. техник хангамжэсвэл шинэ платформ.
  • Цаашид өөрчлөлт хийх үйл явцыг хялбарчлах. Бүтэц нь илүү оновчтой байх тусам кодыг өөрчлөх, шинэ боломжуудыг нэмэх, гүйцэтгэлийг сайжруулах, архитектурыг өөрчлөхөд хялбар байдаг.
  • Хөтөлбөрийн тогтвортой байдлыг хангах. Хэрэв та өөрчлөлт хийвэл эсвэл асуудал гарвал амархан засвар хийх боломжтой. Мөн алдааг зөв зохицуулах нь програм хангамжийн бүтээгдэхүүний ажиллагааг ихээхэн хөнгөвчилдөг.
  • Төслийг олон хөгжүүлэгч эсвэл бүхэл бүтэн нийгэмлэг (ялангуяа нээлттэй эхийн төслүүдэд чухал) дэмжих боломжтой эсэхийг шалгаарай.

Аливаа код нь тодорхой зорилготой хөгжүүлэгчийн санааг хэрэгжүүлэх явдал юм: зугаа цэнгэл бий болгох, корпорацийн програм хангамж бичих, програмчлалын ур чадварыг хөгжүүлэх, үйлдвэрлэлийн програм хангамжийг бий болгох гэх мэт. Сайн код үүсгэх дүрмийг эхлээд хүлээн зөвшөөрч, тэдгээрийг хэрэгжүүлэх нь чухал юм. Ийм зуршил нь программист ажиллах болно, төдий чинээ эрчимтэй төсөл өргөн цар хүрээтэй болно.

Програмчлалын сайн кодын шалгуурууд - GeekBrains-ийн 8 дүрэм

Нэг кодын хэв маягийг дагаж мөрдөөрэй.Хэрэв програмист хүн байгууллагад, ялангуяа томоохон байгууллагад ажиллахаар ирсэн бол түүнийг ихэвчлэн тодорхой төсөл дэх кодыг форматлах дүрмүүдтэй танилцуулдаг (кодын загварын гэрээ). Энэ бол ажил олгогчийн санамсаргүй хүсэл биш, харин ноцтой хандлагын нотолгоо юм.

Энд цөөн хэдэн байна ерөнхий дүрэмТанд учирч болох зүйл:

буржгар хаалт болон доголын зураасыг ажиглаарай - энэ нь кодын блокуудын ойлголтыг ихээхэн сайжруулдаг.
босоо дүрмийг дагаж мөрдөөрэй - ижил асуулга эсвэл нөхцөлийн хэсгүүд ижил догол дотор байх ёстой

хэрэв (төрөл a ! == "тодорхойгүй" &&
b typeof! == "тодорхойгүй" &&
typeof c === "мөр") (
//таны эд зүйлс
}

зайг ажиглах - кодын унших чадварыг сайжруулах зайг байрлуулах; Энэ нь давталтын нөхцөл гэх мэт нийлмэл нөхцөлд онцгой чухал юм.

for (var i = 0; i< 100; i++) {
}

Зарим хөгжүүлэлтийн орчинд та тохиргоог ачаалах замаар эхлээд код форматлах дүрмийг тохируулж болно тусдаа файл(Visual Studio дээр ашиглах боломжтой). Тиймээс төслийн бүх програмистууд ижил төрлийн кодыг автоматаар авдаг бөгөөд энэ нь ойлголтыг ихээхэн сайжруулдаг. Олон жил дадлага хийсний дараа дахин суралцаж, шинэ дүрэмд дасах нь нэлээд хэцүү гэдгийг мэддэг. Гэсэн хэдий ч аливаа компанид кодын хэв маяг нь хатуу дагаж мөрдөх ёстой хууль юм.

"Ид шидийн тоо"-г бүү ашигла.Шидэт тоонуудыг програмчлалын эсрэг загвар, өөрөөр хэлбэл програмын код бичихгүй байх дүрэм гэж нэрлэдэг нь санамсаргүй хэрэг биш юм. Ихэнх тохиолдолд шидэт тоо нь эсрэг хэв маягийн хувьд кодонд хэрэглэгддэг тогтмол бөгөөд тайлбаргүйгээр утга нь тодорхойгүй байдаг. Ийм тоонууд нь кодын ойлголтыг хүндрүүлж, уншихад саад учруулаад зогсохгүй дахин засварлах явцад асуудал үүсгэдэг.

Жишээлбэл, кодонд дараахь мөр байна.
DrawWindow(50, 70, 1000, 500);

Энэ нь кодонд алдаа гаргахгүй нь ойлгомжтой, гэхдээ түүний утга нь хүн бүрт ойлгомжтой биш юм. Залхуурахгүй, тэр даруй ингэж бичих нь дээр.

int зүүн = 50;
int top = 70;
int өргөн = 1000;
int өндөр = 500;
DrawWindow(зүүн, дээд, өргөн, өндөр);

Заримдаа шидэт тоо нь нийтээр хүлээн зөвшөөрөгдсөн тогтмолуудыг ашиглах үед, жишээлбэл, π тоог бичих үед үүсдэг. Төсөл хийгдсэн гэж үзье:

SquareCircle = 3.14 * рад * рад

Юу нь болохгүй байгаа юм бэ? Гэхдээ муу тал бий. Жишээлбэл, хэрэв та ажлын явцад өндөр нарийвчлалтай тооцоолол хийх шаардлагатай бол кодоос тогтмол бүх тохиолдлыг хайх хэрэгтэй бөгөөд энэ нь хөдөлмөрийн нөөцийг дэмий үрэх явдал юм. Тиймээс үүнийг дараах байдлаар бичих нь дээр.

const float pi = 3.14;
SquareCircle = pi радрад

Дашрамд хэлэхэд, заримдаа бусад програмистууд таны ашигласан тогтмолын утгыг санахгүй байж магадгүй - тэгвэл тэд үүнийг кодонд танихгүй. Тиймээс тоонуудыг хувьсагчаар зарлахгүйгээр бичихээс зайлсхийх нь дээр, тэр ч байтугай тогтмол утгыг илүү сайн зарладаг. Дашрамд хэлэхэд эдгээр тогтмолууд нь суулгасан номын санд бараг үргэлж байдаг тул асуудал өөрөө шийдэгддэг.

Хувьсагч, функц, ангиудад утга учиртай нэр ашиглах.Бүх програмистууд "код бүдгэрүүлэх" гэсэн нэр томъёог мэддэг - obfuscator програмыг ашиглан хөтөлбөрийн жилийг зориудаар будилуулах. Энэ нь хэрэгжилтийг нуун дарагдуулах зорилгоор хийгдсэн бөгөөд кодыг тодорхой бус тэмдэгт болгон хувиргах, хувьсагчийн нэрийг өөрчлөх, арга, функцийн нэрийг өөрчлөх гэх мэт ... Харамсалтай нь код нь будлиангүй ч гэсэн будлиантай харагддаг. хувьсагч болон функцүүдийн утгагүй нэрсээс шалтгаалж: var_3698, myBestClass, NewMethodFinal гэх мэт... Энэ нь төсөлд хувь нэмрээ оруулж буй хөгжүүлэгчдэд саад учруулаад зогсохгүй эцэс төгсгөлгүй олон тооны сэтгэгдлүүдэд хүргэдэг. Үүний зэрэгцээ, функцийн нэрийг өөрчилснөөр та тайлбараас ангижрах боломжтой - түүний нэр нь өөрөө юу хийдгийг хэлэх болно.

Өөрийгөө баримтжуулах код гэж нэрлэгддэг нөхцөл байдал гарч ирнэ - хувьсагч болон функцуудыг кодыг харахад энэ нь хэрхэн ажилладаг нь ойлгомжтой байхаар нэрлэгдсэн нөхцөл байдал. Өөрийгөө баримтжуулах кодын санаа нь олон дэмжигчид, эсэргүүцэгчидтэй байдаг бөгөөд тэдний аргументуудыг сонсох нь зүйтэй юм. Ерөнхийдөө бид тэнцвэртэй байж, тайлбар, "ярьдаг" хувьсагчийн нэр, өөрөө баримтжуулах кодын боломжуудыг аль алиныг нь үндэслэлтэй ашиглахыг зөвлөж байна.

Жишээлбэл, ийм кодыг авч үзье:

// навчийг олоод r руу бич
хэрэв (x != null) (
байхад (x.a != null) (
x = x.a;
r = x.n;
}
}
өөр(
r = "";
}

Код яг юу хийдэг нь тайлбараас тодорхой байх ёстой. Гэхдээ x.a, x.n гэж юуг илэрхийлж байгаа нь огт тодорхойгүй байна. Ийм өөрчлөлт хийхийг оролдъё:
// навчийг олоод, навчны нэрийг бичнэ
хэрэв (зангилаа! = null) (
байхад (node.next != null) (
зангилаа = node.next;
leafName = node.name;
}
}
өөр(
leafName = "";
}

Энэ үед сонсогчид үүнийг ашиглах нь зүйтэй, шаардлагатай эсэх талаар олон асуулт асууж байдаг тул тайлбарын талаар тусад нь хэлэх хэрэгтэй. Сэтгэгдэл их байвал код унших чадвар мууддаг. Кодын өөрчлөлтийг бараг үргэлж хийх боломжтой байдаг тул тайлбар хийх шаардлагагүй болно. Томоохон төслүүдэд API ашиглах тохиолдолд гуравдагч талын модулиудын кодыг холбож, маргаантай цэгүүд эсвэл цаашдын боловсруулалт хийх шаардлагатай цэгүүдийг зааж өгсөн тайлбарыг зөвтгөдөг.

Өөр хоёр чухал дүрмийг нэг тодруулгад нэгтгэе. гэх мэт аргуудыг бий болгох шинэ түвшинутга учиртай нэр бүхий хийсвэрлэлТэгээд аргуудыг нягт байлгах.Ерөнхийдөө өнөөдөр кодын модульчлагдсан байдал нь програмист бүрт боломжтой бөгөөд энэ нь та аль болох хийсвэрлэл үүсгэхийг хичээх хэрэгтэй гэсэн үг юм. Хийсвэрлэл нь функциональ хэрэгжилтийн дэлгэрэнгүй мэдээллийг нуух нэг арга юм. Тусдаа жижиг аргуудыг бий болгосноор программист функц тус бүрийн хэрэгжилтийг агуулсан блокуудад хуваагдсан сайн кодыг олж авдаг. Энэ арга нь ихэвчлэн кодын мөрийн тоог нэмэгдүүлдэг. Аргын уртыг 10 мөрөөс хэтрэхгүй гэсэн тодорхой зөвлөмжүүд ч байдаг. Мэдээжийн хэрэг, арга бүрийн хэмжээ нь хөгжүүлэгчээс бүрэн хамааралтай бөгөөд олон хүчин зүйлээс хамаарна. Бидний зөвлөгөө: энэ нь энгийн, нэг арга нь нэг ажлыг гүйцэтгэхийн тулд аргыг авсаархан болго. Алслагдсан бие даасан байгууллагуудыг сайжруулахад илүү хялбар байдаг, жишээлбэл, аргын эхэнд оролтын өгөгдлийн баталгаажуулалтыг оруулах.

Эдгээр дүрмийг харуулахын тулд өмнөх догол мөрийн жишээг авч, код нь тайлбар шаарддаггүй аргыг бий болгоё.
string GetLeafName(Зангилааны зангилаа)(
хэрэв (зангилаа! = null) (
байхад (node.next != null) (
зангилаа = node.next;
}
node.name буцах;
}
буцах"";
}

Эцэст нь, аргын хэрэгжилтийг нуух:

LeafName = GetLeafName(зангилаа); …

Аргуудын эхэнд байгаа оролтыг шалгана уу.Кодын түвшинд оролтын өгөгдлийн шалгалтыг бүх эсвэл бараг бүх аргаар хийх нь зайлшгүй шаардлагатай. Энэ нь хэрэглэгчийн зан төлөвтэй холбоотой: ирээдүйн хэрэглэгчид програмыг сүйрүүлэхэд хүргэж болзошгүй аливаа өгөгдлийг оруулах боломжтой. Аль ч аргын хувьд, тэр ч байтугай нэг удаа ашигласан ч өгөгдлийн баталгаажуулалтыг зохион байгуулж, алдаатай ажиллах шаардлагатай байдаг. Үүнийг хийх нь зүйтэй, учир нь энэ арга нь зөвхөн хийсвэрлэх давхаргын үүрэг гүйцэтгэдэг төдийгүй дахин ашиглахад шаардлагатай байдаг. Зарчмын хувьд эдгээр аргуудыг шалгах шаардлагатай, үүнийг хийх шаардлагагүй гэж хувааж болно, гэхдээ "зальтай хэрэглэгч" -ээс бүрэн итгэлтэй байх, хамгаалахын тулд бүгдийг нь шалгах нь дээр. мэдээлэл оруулах.

Доорх жишээнд бид оролт нь null хүлээн авахгүй байхын тулд чек оруулдаг.
GetEvenItems жагсаалт(Жагсаалтын зүйлс) (
assert(зүйлүүд!= null);

Жагсаалтын үр дүн = шинэ Жагсаалт();
foreach (int i зүйл дотор) (
хэрэв (i % 2 == 0) (
үр дүн.add(i);
}
}
үр дүнг буцаах;
}

Өв залгамжлалтай зөвхөн "би" гэсэн харилцааг хэрэгжүүл. Үгүй бол найрлага.Зохиол нь кодыг уншихад хялбар болгоход чиглэгдсэн гол загваруудын нэг бөгөөд өв залгамжлалаас ялгаатай нь капсулжуулалтын зарчмыг зөрчдөггүй. Та Рудрын анги, Дугуйн ангитай гэж бодъё. Машины ангиллыг Rudder өвөг ангийн удам болгон хэрэгжүүлж болох ч Машинд мөн Wheel ангийн шинж чанарууд хэрэгтэй.

Үүний дагуу программист өв залгамжлал үүсгэж эхэлдэг. Гэхдээ явцуу логикийн үүднээс авч үзвэл Машин анги нь элементүүдийн найрлага юм. Өв залгамжлалыг ашиглан шинэ анги үүсгэх үед ийм код байна гэж бодъё (ScreenElement анги нь Координат ангийн талбарууд болон аргуудыг өвлөн авч, энэ классыг өргөтгөдөг):

Ангийн координат (
нийтийн intx;
public int y;
}
Class ScreenElement: Координат(
олон нийтийн зан чанарын тэмдэг;
}

Найрлагыг ашиглацгаая:
Ангийн координат (
нийтийн intx;
public int y;
}
анги ScreenElement(
олон нийтийн зохицуулалт;
олон нийтийн зан чанарын тэмдэг;
}

Зохиол нь удамшлын сайн орлуулагч бөгөөд энэ загвар нь бичсэн кодыг илүү сайн ойлгоход хялбар байдаг. Та энэ дүрмийг дагаж мөрдөж болно: зөвхөн хүссэн анги нь өвөг дээдсийн ангилалтай төстэй бөгөөд бусад ангийн аргыг ашиглахгүй тохиолдолд л өв залгамжлалыг сонгоно. Нэмж дурдахад, найрлага нь программистыг өөр нэг асуудлаас авардаг - энэ нь өв залгамжлалын үед үүсдэг нэрний зөрчлийг арилгадаг. Найрлага нь бас сул талтай: объектын тоог үржүүлэх нь гүйцэтгэлд нөлөөлдөг. Гэхдээ дахин хэлэхэд энэ нь төслийн хамрах хүрээнээс шалтгаалдаг бөгөөд үүнийг хөгжүүлэгч тус бүрээр нь үнэлэх ёстой.

Хэрэгжилтээс тусдаа интерфейс.Хөтөлбөрт хэрэглэгдэж буй аливаа анги нь интерфэйс (ангийг гаднаас нь ашиглах боломжтой) болон хэрэгжүүлэлтээс (арга) бүрдэнэ. Кодын хувьд интерфэйс нь OOP зарчмуудын аль нэгэнд нийцэх, капсулжуулалт, кодын унших чадварыг сайжруулахын тулд хэрэгжилтээс тусгаарлагдсан байх ёстой.

Нэг ангид орцгооё:

ангиллын талбай ( нийтийн хөвөгч ирмэг; нийтийн хөвөх талбай; )

Өөр анги:

анги дөрвөлжин( нийтийн хөвөгч GetEdge(); нийтийн хөвөгч GetArea(); нийтийн хүчингүй SetEdge( хөвөх e) ; нийтийн хүчингүй SetArea( хөвөх а) ; хувийн хөвөгч ирмэг; хувийн хөвөх талбай; )

Хоёрдахь тохиолдол нь илүү тохиромжтой, учир нь энэ нь хувийн хандалтын хувиргагчтай хэрэгжилтийг нуудаг. Кодын унших чадварыг сайжруулахаас гадна интерфэйсийг хэрэгжилтээс тусгаарлах нь интерфэйсийг жижиг байлгахын зэрэгцээ өөр нэг чухал давуу талтай: програмын доголдол гарсан тохиолдолд алдааны шалтгааныг олохын тулд цөөн хэдэн функцийг шалгах шаардлагатай. Илүү нээлттэй функц, өгөгдөл байх тусам алдааны эх үүсвэрийг олоход хэцүү болно. Гэсэн хэдий ч интерфейс нь бүрэн дүүрэн байх ёстой бөгөөд шаардлагатай бүх зүйлийг хийх боломжийг танд олгох ёстой, эс тэгвээс энэ нь ашиггүй болно.

Вебинарын үеэр "Рефактор биш шууд сайн бичих боломжтой юу?" Гэсэн асуулт асуув. Магадгүй, хэдэн жил эсвэл бүр хэдэн арван жилийн програмчлалын дараа, ялангуяа хөтөлбөрийн архитектурын талаархи анхны төсөөлөл байгаа бол энэ нь боломжтой байх болно. Гэхдээ та хэд хэдэн хувилбар, сайжруулалтын давталтаар төслийн эцсийн төлөвийг хэзээ ч урьдчилан харж чадахгүй. Ийм учраас таны хөтөлбөрийн тогтвортой байдал, хөгжих чадварыг баталгаажуулдаг эдгээр дүрмийг үргэлж санаж байх нь чухал юм.

Программист ажилд авах сэдвээр бичсэн нийтлэлүүдийн ихэнх нь бараг ижил сонсогддог. Дүрмээр бол ийм нийтлэлүүд нь "зөвхөн хамгийн сайныг нь ажилд авах" гэж зөвлөж байна. Энэ зөвлөгөө хэтэрхий тодорхойгүй сонсогдож байгаа тул би сэтгэл хангалуун бус байгаагаа хүлээн зөвшөөрч байна. Автомашины худалдаанд ирээд худалдагчаас танд ямар машин санал болгох вэ гэж асуухад “Шилдэг” гэдэг нь автомашины дилерийн аль ч машинд заагаагүй гэж хариулдагтай адил.

Намайг битгий буруугаар ойлгоорой, би чамд санаатайгаар дунд зэргийн програмистуудыг хайж олохыг зөвлөхгүй байна. Мэдээжийн хэрэг, хүн бүр зөвхөн хамгийн чадварлаг, туршлагатай програмистуудыг ажилд авахыг хүсдэг. Ажилд авах шийдвэр гаргахад эрсдэл өндөр байдаг. Таны шийдвэр бүхэл бүтэн баг болон түүний гишүүдийн ажилд нөлөөлнө. Тэдний хэлснээр:

"Сайн нэр дэвшигчээс татгалзах нь муу нэр дэвшигчийг хүлээн зөвшөөрөхөөс хамаагүй дээр ... Хэрэв танд өчүүхэн ч гэсэн эргэлзэж байвал ажилд авахгүй."

Гэхдээ стандарт зөвлөгөө намайг залхааж байна. Энэ нь өөрөө зөвлөгөө биш, харин хүмүүс үүнийг буруугаар ойлгох хандлагатай байдаг. Хэрэв нэмэлт өөрчлөлт оруулахгүйгээр хэрэгжүүлбэл энэ дадлага нь үндсэндээ давуу байдлын мэдрэмжийг бий болгодог. Энэ нөлөө нь ялангуяа програмистуудын дунд түгээмэл байдаг, учир нь элитизм бидэнд ямар нэгэн байдлаар байдаг. Бид зөвхөн "хамгийн сайн"-ыг ажилд авах ёстойг сонсоход энэ зөвлөгөө нь далд ухамсарт өөрчлөлт ордог.

"Хамгийн шилдэг нь?" Гэхдээ энэ бол би! Би хамгийн шилдэг нь". Мэдээж өөр шигээ авьяастай, ухаантай, аятайхан хүмүүсийг ажилд авах ёстой. Яагаад миний шилдэг багийг янз бүрийн хэлмэгдүүлэлтээр хутгаад байгаа юм бэ?

Шилдэг програмистууд хэн бэ?

Мэдээжийн хэрэг, энэ арга нь шийдвэр гаргах хамгийн сайн нөхцлийг бүрдүүлдэггүй. Хэрэв та үүнийг арай өөрөөр ойлговол стандарт дүрэм илүү сайн ажилладаг:

“Би хамгийн үр дүнтэй багийг бүрдүүлэхийг хүсч байна. Нэмэлт ажилтан авснаар би зөвхөн боловсон хүчний тоог нэмэгдүүлэхийг эрмэлзэж байна. Ажилд авсан хүн бүр миний багийг ямар нэгэн байдлаар сайжруулах ёстой. Би өөр шигээ авьяастай хүнийг хайдаггүй. Үүний оронд надад ядаж нэг чухал чиглэлд надаас илүү авьяастай хүн хэрэгтэй байна.

Дарга

Хамгийн муу дарга бол багийнхаа заналхийллийг мэдэрдэг хүн юм. Ухамсартай эсэхээс үл хамааран тэрээр "хамгийн сайнаас" айдаг тул өөрт нь давуу талтай харагдах хүмүүсийг байнга ажилд авдаг.

Та ийм арга барилаар томоохон компанид амьдрах боломжтой. Би Дилберт комик дахь Shaggy Boss-ыг амьдралаас авсан гэж хүчтэй сэжиглэж байна.

Гэхдээ програм хангамж хөгжүүлэлтийн жижиг фирмүүдийн ертөнцөд бүх зүйл тэс өөр байдаг. Хэрэв та жижиг пүүсийн үүсгэн байгуулагч эсвэл "толгой гуру" бол өөрийгөө болгоомжтой, шударга, бодитой хар. Хэрэв та ажилчдынхаа заналхийллийг мэдэрч байгаа хүмүүсийн нэг бол зогсоод бод. Та энэ асуудлыг шийдэж чадахгүй бол үр дүнтэй багийг бүрдүүлэх боломж 0 байх болно.

Програмистуудын боловсон хүчин

Стандарт дүрмийн жинхэнэ утга нь бидний эго-г зугаацуулахгүй байх явдал юм - энэ нь илүү сайн ажилчдыг хайхаас айхгүй байхыг сануулах явдал юм. Гэсэн хэдий ч "хамгийн сайн" гэдэг үг яг ямар утгатай болохыг олж мэдэх шаардлагатай байна.

Дотроо харах хандлагатай хүмүүсийг хайж олоорой

"Шилдэг" ажилчид хэзээ ч суралцахаа зогсоодог.

Нэр дэвшигчдийг үнэлэх хамгийн чухал шалгууруудын нэг бол би өөрөө "эхний дериватив" гэж нэрлэдэг зүйлээ авч үздэг. Энэ хүн сурч байгаа юу? Энэ нь урагшлах уу эсвэл зогсох уу? (Энэ сэдвийн талаархи миний зарим санааг миний блог дээрх Карьерын тооцооллын нийтлэлд нийтэлсэн болно).

Ирээдүйн амжилтандаа нухацтай ханддаг хүмүүс амжилтанд хүрэх магадлал өндөр байдаг. Энэ сэтгэлгээ нь ихэвчлэн ажилд авах шийдвэр гаргах хамгийн хүчтэй шинж тэмдэг юм.

Энэ нь зөвхөн амжилтанд хүрэхийг хүсч буй хүмүүсийг ажилд авах ёстой гэсэн үг биш юм. Бүх хүмүүс амжилтанд хүрэхийг хүсдэг. Тасралтгүй суралцахад нухацтай ханддаг хүмүүсийг ажилд авахыг зөвлөж байна. Эдгээр хүмүүс таныг хэр их мэддэг болохыг итгүүлэх гэж цаг үрдэггүй. Тэд өнгөрсөнд анхаарлаа төвлөрүүлдэггүй, ирээдүйд биш. Чамайг тэдэнтэй ярилцлага хийж байхад тэд чамаас юу сурч болохыг харахыг хичээж байна.

Ийм хүнийг яаж олох вэ?

Нэг онцлог шинж чанар нь байнга суралцахаар шийдсэн хүмүүс мэдэхгүй зүйлээ сайн мэддэг. Тэд өөрсдийн сул талыг мэддэг бөгөөд тэдний талаар ярихаас айдаггүй.

Ярилцлагад нэр дэвшигчээс гол сул талыг нь тайлбарлахыг хүсдэг. Хэдийгээр энэ асуулт нь аймшигтай уламжлалт боловч надад таалагдаж байна.

Харамсалтай нь олон нэр дэвшигчид хариултаас бултах гэж оролддог. Тэд номын дэлгүүрт орж ярилцлага хийх тухай ном худалдаж авдаг. Энэ номонд би тэднээс энэ асуултыг асуух болно гэдгийг анхааруулж, чин сэтгэлийн хариултаас зайлсхийх "бүтээлч" аргуудыг санал болгож байна.

  • Заримдаа би хэтэрхий шаргуу ажилладаг.
  • Заримдаа миний нарийн ширийн зүйлийг анхаарч үзэх нь хамтлагийн бусад гишүүдийг бухимдуулдаг.

Би нэр дэвшигчээс сул талуудынхаа талаар асуухад ухаалаг, чин сэтгэлээсээ, итгэлтэй хариултыг хүлээж байна. Нэр дэвшигч өөрийн сул талаа хүлээн зөвшөөрөхийг сонсоход надад сэтгэгдэл төрдөг. Гэхдээ хэрэв нэр дэвшигч номноос шууд бултсан хариулт өгвөл би дараагийн нэр дэвшигчийн талаар бодож эхэлдэг.

Програмист биш харин хөгжүүлэгчдийг ажилд авна

Жижиг пүүсийн хувьд "хамгийн сайн" программистууд нь зөвхөн програмчлалаар хязгаарлагдахгүй хүмүүс байдаг. Программист биш харин хөгжүүлэгчийг ажилд авахыг хичээ. Хэдийгээр эдгээр үгсийг ихэвчлэн сольж хэрэглэдэг боловч би тэдгээрийг хооронд нь ялгаж үздэг. Энэ талаар юмэнгийн програмчлал ба бүтээгдэхүүний багийн нэг хэсэг байх хоёрын ялгааны тухай. Энэ сэдвээр миний блог дээр бичсэн нийтлэлээс эш татав.

"Энэ нийтлэлд "программист" гэдэг нь зөвхөн шинэ функцуудыг кодлох, [хэрэв та азтай бол] алдаа засах ажилд санаа тавьдаг хүнийг хэлдэг. Програмистууд техникийн үзүүлэлтүүдийг бичдэггүй. Тэд автоматжуулсан туршилтын тохиолдлуудыг үүсгэдэггүй. Тэд дэмжлэг үзүүлэхэд тусалдаггүй автоматжуулсан системүүдбүтээн байгуулалтууд шинэчлэгдсэн. Тэд үйлчлүүлэгчдэд шийдвэр гаргахад нь тусалдаггүй техникийн асуудлууд. Тэд бичиг баримт бичихэд тусалдаггүй, шалгалтанд оролцдоггүй, кодыг ч уншдаггүй. Тэдний хийдэг зүйл бол шинэ код бичих явдал юм. Ийм хүмүүсийг жижиг компанид байлгах нь үнэ цэнэтэй зүйл биш юм.

"Программистууд" (код бичих чиглэлээр мэргэшсэн хүмүүс) оронд "хөгжүүлэгчид" (бүтээгдэхүүнийг амжилтанд хүргэхэд олон талаар хувь нэмэр оруулдаг хүмүүс) хэрэгтэй.

Стандарт дүрэм нь юу гэсэн үг вэ? Нэр дэвшигчийг "хамгийн сайн" эсэхийг тодорхойлохын тулд ямар шинж чанарыг хэмжих ёстой вэ?

Ихэнхдээ энэ дүрмийг зөвхөн кодлох чадвартай холбоотой гэж ойлгодог. Гэхдээ үнэхээр сайн програмистууд ухаалаг байдаг. Тэд ихэвчлэн заадаггүй зүйлсийг ойлгодог бөгөөд дундаж програмистаас 10 дахин илүү үр дүнтэй ажиллаж чаддаг. Мэдээжийн хэрэг, эдгээр "10x" хувь хүний ​​аль нэгийг хайх нь ухаалаг хэрэг болно, ялангуяа "цэвэр" програмистууд шиг мэргэжилтнүүд тохиромжтой байдаг томоохон байгууллагуудад. Гэхдээ жижиг пүүст олон талт байдал хэрэгтэй. Багийн гишүүд код бичихээр хязгаарлагдахгүй хэд хэдэн функцийг гүйцэтгэхийг шаарддаг. Ийм тохиолдолд хамгийн сайн хөгжүүлэгчийг олох нь маш чухал бөгөөд энэ хүн хамгийн сайн програмист байх албагүй.

Тиймээс стандарт дүрэм нь нэлээд сайн ажилладаг боловч ерөнхий зөвлөмжөөс илүү тодорхой зүйл рүү шилжих шаардлагатай байна. Өмнөх хэсгүүдэд хэлсэн зүйлийг нэгтгэн дүгнэхийн тулд хөгжүүлэгчийн нэр дэвшигчийг авч үзэхдээ өөрөөсөө асуух 10 асуулт байна.

  1. Энэ нэр дэвшигч бүлэгт хэний ч хийж чадахгүй зүйлийг хийж чадах уу?
  2. Тэр байнгын суралцах үйл явцтай юу?
  3. Энэ нэр дэвшигч тэдний сул талыг мэдэж, тайвнаар хэлэлцэж чадах уу?
  4. Энэ нэр дэвшигч хэр олон талын чадвартай бөгөөд бүтээгдэхүүний арилжааны амжилтыг баталгаажуулахын тулд "юу ч шаардлагатай" хийж чаддаг вэ?
  5. Нэр дэвшигч нь "арван дахин" програмистуудын тоонд хамаарах уу?
  6. Тэр нэр хүндтэй их сургуулийн бакалаврын зэрэгтэй юу?
  7. Хэрэв нэр дэвшигч нь докторын зэрэгтэй бол арилжааны бүтээгдэхүүн боловсруулах чадварын өөр шинж тэмдэг байна уу?
  8. Нэр дэвшигч нь арилжааны бүтээгдэхүүн боловсруулсан багт ажиллаж байсан туршлагатай юу?
  9. Нэр дэвшигч сайн кодын жишээг өгч чадах уу?
  10. Нэр дэвшигч чөлөөт цагаараа код бичих хангалттай програмчлалд дуртай юу?

Бүх 10 асуултанд эерэг хариулт өгөх шаардлагагүй. Би нэр дэвшигчийг хүлээн авахад шаардагдах эерэг хариуны дээд хэмжээг хэлэхгүй. Ажилд авах нь сугалаа бөгөөд асуулт бүр нь нэр дэвшигчийн тохирох эсэхийг үнэлэх шинж тэмдэг болдог.

Эцсийн эцэст ажилд авах тал дээр аливаа шийдвэрийг хүсэл зоригоор гаргадаг бөгөөд энд ямар ч баталгаа өгөх боломжгүй юм. Гэсэн хэдий ч хэрэв та эдгээр асуудалд анхаарлаа хандуулбал дараа нь гаргасан шийдвэртээ харамсахгүй байх магадлалыг нэмэгдүүлэх болно.

Хэрэв та одоо unsigned short-ийн нэрээр тодорхойлогддог wchar_t-ээр бичигдсэн хуучин сургуулийн код, мөн wchar_t-ээр тодорхой дотоод төрөл хэлбэрээр бичигдсэн шинэ сургуулийн код хоёуланг нь ашиглах номын сан бичиж байгаа бол танд асуудал байна. Мөрийн параметрүүдэд ямар өгөгдлийн төрлийг ашиглах шаардлагатай вэ?

Энэ бол Visual C++ дээрх Юникод printf маягийн формат тодорхойлогчдын гунигтай түүхийн орчуулга юм.

Windows бусад олонхоос өмнө Юникод нэвтрүүлсэн үйлдлийн системүүд. Үр дүнд нь Windows шийдэлУчир нь олон асуудал тоосжилтыг хүлээж байсан хүмүүсийн гаргасан шийдвэрээс ялгаатай байдаг¹. Үүний хамгийн тод жишээ нь Windows-ийн хэрэглээ UCS-2 нь Юникод кодчилол юм. Энэ нь Юникод 1.0 нь зөвхөн 65"536 тэмдэгт² дэмждэг тул Юникод Консорциумаас санал болгосон кодчилол байсан. Юникод Консорциум таван жилийн дараа бодлоо өөрчилсөн боловч Win32, Windows NT 3.1, Windows NT 3.1 хувилбарыг аль хэдийн гаргасан Windows-д хэтэрхий оройтсон байв. Windows NT 3.5 , Windows NT 3.51 болон Windows 95 - бүгд UCS-2³ ашигласан.

Гэхдээ өнөөдөр бид printf маягийн форматын мөрүүдийн талаар ярих болно.

Энэ бол FlushInstructionCache юу ч хийхгүй бол яагаад үүнийг дуудах ёстой гэж, revisited-ийн орчуулга юм.

Ажиллаж байх үед гүйцэтгэгдэх кодыг үүсгэх эсвэл өөрчлөх үед та FlushInstructionCache функцийг дуудах ёстой бөгөөд ингэснээр процессор таны үүсгэсэн/өөрчлөгдсөн кодыг ажиллуулахдаа процессорын дотор үлдсэн хуучин зааварчилгааг бус таны бичсэн зааврыг унших болно. зааврын кэш.

Бид үүнийг өмнө нь сурсан. Учир нь командын кэшийг цэвэрлэхэд энгийн функцийн дуудлага хангалттай байсан.

Гэхдээ Windows NT дээр FlushInstructionCache функц ажилладаг жинхэнэ ажил, учир нь энэ нь кэшээ цэвэрлэхийн тулд бусад бүх процессоруудад мэдэгдэх шаардлагатай.

Гэсэн хэдий ч, хэрэв та Windows 10-ийг харвал FlushInstructionCache функц нь Windows 95 хувилбартай төстэй болохыг олж мэдэх болно. тэр юу ч хийдэггүй.

Энд юу болсон бэ?

Сүүлийн үед би маш сайн кодыг бага зэрэг харсан, маш их дунд зэргийн болон Машмаш их муу. (Өмнө нь бичиж байсан зүйлсийн ихэнх нь, ялангуяа би анх эхэлж байх үед - сүүлийн үеийнх юм, харамсалтай.) Интернэтээс санамсаргүй нийтлэл, мэргэжлийн ном уншиж байхдаа би сайн код бичих амархан юм байна гэсэн дүгнэлтэд хүрсэн. Гайхалтай хэцүү, гэхдээ нэгэн зэрэг хялбар. Үнэн хэрэгтээ энэ нь маш энгийн бөгөөд гурван дүрмийн дагуу явагддаг.

  1. Машинд биш хүмүүст зориулж код бич.
  2. Кодын хэсэг бүр нэг ажлыг гүйцэтгэх ёстой.
Тэдгээрийг тууштай дагаснаар та сайн код бичих болно. Ямар ч програмчлалын хэл, ямар ч парадигмд. Асуудал нь маш хэцүү байдаг. Тэд бүгд сахилга бат шаарддаг бөгөөд ихэнх тохиолдолд сүүлийн хоёр нь удаан хугацааны эргэцүүлэн бодохыг шаарддаг.
Машинд биш хүмүүст зориулж код бич
Энэ бол гурван дүрмийн хамгийн чухал нь бөгөөд бусад хоёр дүрмийн үндэс юм. Хүний хувьд хялбар код бичих; хүнд хэцүү ажлыг компьютерт даатга. Утга учиртай хувьсагч болон аргын нэрийг ашигла. Энгийнийг ашиглаж болох төөрөгдүүлсэн логик хэлхээ үүсгэж болохгүй. Нэг мөрөнд аль болох их хэмжээгээр багтахыг хичээх хэрэггүй. Ажиглах жигд хэв маягутга учиртай доголтой код бичих. Хэрэв таны файлууд маш том хэмжээтэй тул тэдгээрийг гүйлгэх нь хэцүү бол тэдгээрийг хэд хэдэн жижиг файл болгон хуваа.

Олон програмистууд тэдний бодлоор илүү хурдан ажилладаг, програмын хэмжээг багасгадаг, нэг үгээр хэлбэл компьютерийн ажлыг "хөнгөвчлөх" зүйлийг бичихийг хичээдэг. Энэ бол гайхалтай, гэхдээ бусад хүмүүст уншиж, засварлахад хялбар код бичих нь илүү чухал гэдгийг бүү мартаарай.

Таны хөрвүүлэгч (эсвэл орчуулагч) өөр өөр хэв маягийн кодыг зохицуулж чадна. Түүнд nТэгээд numberOfObjects-Тийм л байна. Хүний хувьд, үгүй. Хувьсагчийн зорилго нь танд ойлгомжтой мэт санагдаж байсан ч кодыг уншихад удаан хугацаа шаардагдана.

Та өөртөө зориулж жижиг скрипт хийсэн гэж төсөөлөөд үз дээ, хэдэн жилийн дараа та үүнийг бага зэрэг өөрчлөх хэрэгтэй болсон. Та юу үзэхийг илүүд үзэх вэ: сайн бүтэцтэй, тайлбар, тодорхой нэр бүхий скрипт үү, эсвэл ганц тайлбаргүй, зорилгыг нь ойлгох бараг боломжгүй хувьсагчтай нэг функц үү?

Хэрэв та кодын хэсгийг оновчтой болгохын тулд тодорхой бус зүйл хийвэл энэ нь яг юу болохыг тайлбар дээр тайлбарлана уу. Гэхдээ ихэнх тохиолдолд програмыг хөрвүүлэгчээс илүү оновчтой болгох боломжгүй гэдгийг бүү мартаарай. Бодит байдал бол тэр чамаас илүү ухаантай. Энэ бол баримт: эмхэтгэгчид мэргэжлийн хүмүүсийн олон арван жилийн шаргуу хөдөлмөрийн үр дүнд сайжирсан. Үл хамаарах зүйлүүд байдаг, гэхдээ тэдгээр нь зөвхөн дүрмийг нотолж байна.

Хүмүүст ойлгомжтой код бичээрэй.

Өөрийгөө бүү давт
Хөтөлбөрийн янз бүрийн хэсэгт ижил кодыг хэдэн удаа харсанаа би тоолж чадахгүй байна. Өнөөдөр би хуучин кодын том функц дээр ажиллаж байсан бөгөөд нөхцөл байдлын хоёр өөр хэсэгт ижил нөхцөлийг олж харлаа. Энэ нь зүгээр л програмистын алдаа байсан эсэхийг шалгахын тулд би цаг гаргах хэрэгтэй болсон.

Та ижил фрагментийг хэд хэдэн газар давтвал эрт орой хэзээ нэгэн цагт алдаагаа засах эсвэл шинэ зүйл нэмэхийн тулд түүн рүү буцаж очих хэрэгтэй болно. Энэ нь кодыг хадгалахад хэцүү болгодог. Өөрийгөө давтахын оронд фрагментийг шаардлагатай бол дуудаж болох тусдаа анги эсвэл функцэд оруулаарай. Хэрэв та олон аргыг өөр газар ижил дарааллаар дуудвал үүнийг тусдаа функцээр боож өгнө үү.

Кодыг харахад юуг ойлгоход илүү хялбар болохыг бодоорой: санах ойн блокыг чөлөөлөх 30 мөрийн хэсэг эсвэл функцийн дуудлага. clearMapVariableMemory()?
Та дараа нь хэсэгчилсэн хэсгийг судлах хэрэгтэй байж болох ч тэр үед ч гэсэн нэг функцтэй ажиллахад хялбар байх болно.

Үүнтэй ижил зарчмыг өгөгдөлд ашиглаж болно. Хэрэв та ижил хувьсагчийг байнга ашигладаг бол тэдгээрийг тусдаа анги эсвэл өгөгдлийн төрөл рүү шилжүүлээрэй.

Хэрэв та энэ дүрмийг дагаж мөрдвөл бүх өөрчлөлтүүд бүх нийтийнх байх болно - жижиг засвар хийхийн тулд олон арван газрыг дахин боловсруулах шаардлагагүй болно.

Өөрийгөө бүү давт.

Кодын хэсэг бүр нэг даалгавар хийх ёстой
Сүүлийн дүрэм нь өмнөх хоёр дээр суурилдаг: Таны кодын хэсэг бүр зөвхөн нэг зүйлийг хийх ёстой. Энэ нь бүх түвшинд үнэн юм: илэрхийлэл, функц, арга, анги, объектын хувьд.

Хэдэн жилийн өмнө нэгэн хөгжүүлэгч надад ажиллахгүй байгаа кодыг харуулсан. Үүнийг олохын тулд програмист хэдэн цаг зарцуулсан. Үүний үр дүнд, асуудал нь дараах өсөлтийн C хэллэгүүдэд олдсон (тусгай тохиолдолд, тэдгээрийн зан төлөв нь хөрвүүлэгчээс хөрвүүлэгчээс ялгаатай байдаг). Дараа нь хөгжлийн тухай ном уншиж байхдаа би жинхэнэ асуудал нь мэдэгдэлд биш, харин нэг хэсэг нь олон янзын ажлыг гүйцэтгэх үүрэгтэй гэдгийг тэмдэглэв.

Миний санаж байгаагаар алдааг агуулсан мөр нь гуравдагч үйлдлийн нэг хэсэг байсан. Энэ нь эргээд нөхцөлийг тооцоолохын тулд заагч дээр хэд хэдэн үйлдлийг гүйцэтгэсэн бөгөөд нөхцөлт илэрхийллийн үр дүнгээс хамааран өөр хэд хэдэн үйлдэл хийсэн. Байсан сайн жишээкод бичих нь тухайн хүнд биш, үндсэндээ машинд зориулагдсан: фрагментийн зохиогчоос өөр хэн ч энэ мөрийг хэд хэдэн удаа уншсан ч яг юу болохыг ойлгохгүй. Хэрэв код бичсэн програмист логикийг хэд хэдэн хэсэгт хуваасан бол асуудлыг шийдвэрлэхэд хамаагүй бага хугацаа шаардагдах байсан.

Та ижил аргаар өгөгдлийг задлах, боловсруулах, өөрчлөх ёсгүй. Функц бүрийн аман тайлбар нь нэг өгүүлбэрт багтах ёстой. Мөр бүрийн зорилго тодорхой байх ёстой. Энэ нь кодыг хүмүүст ойлгомжтой болгодог. Бидний хэн нь ч хэдэн мянган мөр урттай функцийг толгойдоо хадгалж чадахгүй. Мөн хэд хэдэн жижиг аргуудыг хамтад нь ашиглахын оронд ийм функцийг бий болгох чухал шалтгаан байхгүй.

Энэ нь тийм ч хэцүү биш гэдгийг тэмдэглэх нь зүйтэй: нэг том ажлыг гүйцэтгэхийн тулд та үүнийг хэд хэдэн жижиг зүйл болгон хуваах хэрэгтэй бөгөөд тус бүр нь тусдаа функцтэй байдаг. Функц бүрийн зорилго тодорхой хэвээр байгаа эсэхийг шалгах нь чухал бөгөөд эс тэгвээс код нь хэтэрхий ойлгомжгүй болно.

Таны кодын хэсэг бүр нэг ажлыг гүйцэтгэх ёстой.

Дүгнэлт
Сайн код бичих нь хэцүү ажил юм. Би дөрвөн жилийн турш программ зохиосон - тийм ч удаан биш, гэхдээ өөрийнхөө асуудлыг оруулаад нэлээд хэдэн асуудлыг харах хангалттай урт. Эдгээрийг ажиглаагүйгээс бид хөгжлийг хүндрүүлдэг нь надад тодорхой болсон энгийн дүрэм. Тэдгээрийг зөв ажиглах нь хэцүү байдаг: тусдаа анги эсвэл арга хаана шаардлагатай байгаа нь үргэлж тодорхой байдаггүй. Энэ бол ур чадвар юм. Сайн программист болоход их хугацаа шаардагддаг. Гэхдээ бид эдгээр дүрмийг дагаж мөрдөхгүй бол код бичих, хадгалах нь бүр ч хэцүү болно.

Нийтлэлийн орчуулга

Чанарын код бичих 15 дүрэм

Муу код бичих олон арга бий. Аз болоход чанарын кодын түвшинд хүрэхийн тулд 15 дүрмийг дагаж мөрдөхөд хангалттай. Тэднийг ажиглах нь таныг эзэн болгохгүй, харин түүнийг үнэмшилтэйгээр дуурайх боломжийг танд олгоно.

Дүрэм 1. Кодлох стандартыг дагаж мөрдөнө.

Програмчлалын хэл бүр өөрийн гэсэн код форматлах стандарттай байдаг бөгөөд үүнд хэрхэн догол хийх, хаана зай, хаалт хийх, объектыг хэрхэн нэрлэх, кодын тайлбар хийх гэх мэтийг зааж өгдөг.

Жишээлбэл, энэ кодонд стандартын дагуу 12 алдаа байна:

For(i=0;i

Стандартыг анхааралтай судалж, үндсийг цээжээр сурч, дүрмийг зарлиг болгон дагаж мөрдвөл таны хөтөлбөрүүд ихэнх төгсөгчдийн бичсэнээс илүү сайн байх болно.

Олон байгууллага стандартыг өөрсдийн хэрэгцээнд нийцүүлэн тохируулдаг. Жишээлбэл, Google 12 гаруй програмчлалын хэлний стандартыг боловсруулсан. Тэдгээрийг сайтар бодож боловсруулсан тул Google програмчлалын талаар тусламж хэрэгтэй бол шалгаарай. Стандартууд нь хэв маягийг дагахад тань туслах засварлагчийн тохиргоо болон таны код энэ загварт нийцэж байгаа эсэхийг шалгах тусгай хэрэгслүүдийг багтаасан болно. Тэдгээрийг ашигла.

Дүрэм 2. Тодорхойлох нэрсийг өгнө үү.

Удаан, болхи телетайпуудаар хязгаарлагдаж байсан эртний програмистууд цаг хугацаа, товчлуур дарах, бэх, цаас хэмнэхийн тулд хувьсагч болон процедурын нэрийн гэрээг ашигладаг байв. Энэ соёл нь зарим нийгэмд хоцрогдсон нийцтэй байдлыг хадгалахын тулд байдаг. Жишээлбэл, хэлийг эвддэг C функцийг авч үзье wcscspn (тэмдэгтийн өргөн хүрээг нөхөх зай). Гэхдээ энэ аргыг орчин үеийн кодонд хэрэглэх боломжгүй.

Ирээдүйд өөртөө болон бусдад таны кодыг ойлгоход туслахын тулд complementSpanLength гэх мэт урт, дүрсэлсэн нэрсийг ашигла. Үл хамаарах зүйл нь давталтын давталт, параметр, түр зуурын утгууд эсвэл гүйцэтгэлийн үр дүн гэх мэт аргын биед хэрэглэгддэг хэд хэдэн чухал хувьсагч юм.

Аливаа зүйлийг нэрлэхээсээ өмнө удаан бодож, сайн бодох нь илүү чухал юм. Нэр нь үнэн зөв үү? Та хамгийн өндөр үнэ эсвэл хамгийн сайн үнэ гэсэн үг үү? Нэр нь ижил утгатай объектын хувьд өөр контекст ашиглахаас зайлсхийхэд хангалттай тодорхой байна уу? getBest гэхийн оронд getBestPrice аргыг нэрлэсэн нь дээр биш гэж үү? Энэ нь бусад ижил төстэй нэрсээс илүү тохирох уу? Хэрэв танд ReadEventLog арга байгаа бол өөр NetErrorLogRead руу залгаж болохгүй. Хэрэв та функцийг дуудвал түүний нэр буцах утгыг тайлбарлах уу?

Эцэст нь нэрлэх хэд хэдэн энгийн дүрэм. Анги, төрлийн нэр нь нэр үг байх ёстой. Аргын нэр нь үйл үг агуулсан байх ёстой. Хэрэв арга нь тухайн объектын талаарх зарим мэдээлэл үнэн эсвэл худал эсэхийг тодорхойлох юм бол түүний нэр нь "is" гэж эхлэх ёстой. Объектын шинж чанарыг буцаах аргууд нь "get"-ээр эхлэх ёстой бөгөөд шинж чанарын утгыг тохируулах аргууд нь "set"-ээр эхлэх ёстой.

Дүрэм 3. Сэтгэгдэл, баримт бичиг.

Арга, процедур бүрийг тайлбарт тухайн арга, процедур юу хийдэг, параметрүүд, буцаах утга, болон болзошгүй алдаануудболон үл хамаарах зүйлүүд. Файл болон анги тус бүрийн үүрэг, анги талбар бүрийн агуулга, нарийн төвөгтэй кодын үндсэн алхмуудыг тайлбар дээр тайлбарлана уу. Кодыг боловсруулахдаа сэтгэгдэл бичээрэй. Дараа нь бичнэ гэж бодож байгаа бол өөрийгөө хуурч байна.

Нэмж дурдахад, таны програм эсвэл номын сан нь таны кодыг юу хийдгийг тайлбарлах, түүний хамаарлыг тодорхойлох, бүтээх, турших, суулгах, ашиглах зааварчилгааг агуулсан гарын авлагатай эсэхийг шалгаарай. Баримт бичиг нь богино бөгөөд тохиромжтой байх ёстой; README файл байхад л хангалттай.

Дүрэм 4. Өөрийгөө бүү давт.

Кодыг хэзээ ч хуулж буулгаж болохгүй. Үүний оронд нийтлэг хэсгийг арга эсвэл ангид (эсвэл шаардлагатай бол макро) задалж, тохирох параметрүүдийг ашиглана уу. Ижил төрлийн өгөгдөл болон код ашиглахаас зайлсхий. Мөн дараах техникийг ашигла.

  • Javadoc болон Doxygen ашиглан тайлбараас API лавлагаа үүсгэх.
  • Аннотаци эсвэл нэршлийн дүрэмд үндэслэн нэгжийн тестийг автоматаар үүсгэх.
  • Нэг тэмдэглэгээний эх сурвалжаас PDF болон HTML үүсгэх.
  • Ангийн бүтцийг мэдээллийн сангаас авах (эсвэл эсрэгээр).

Дүрэм 5. Алдаа байгаа эсэхийг шалгаж, түүнд хариу үйлдэл үзүүлэх.

Арга нь алдааны заалтыг буцаах эсвэл үл хамаарах зүйл үүсгэж болно. Тэдгээрийг боловсруул. Дискийг хэзээ ч дүүргэхгүй, тохиргооны файл чинь үргэлж тэнд байх, програм бүрэн зөвшөөрөлтэй ажиллах, санах ой хуваарилах хүсэлт үргэлж амжилттай байх, холболт хэзээ ч тасрахгүй гэдэгт найдах хэрэггүй. Тиймээ, алдааг сайн зохицуулах нь бичихэд хэцүү бөгөөд кодыг уншихад илүү урт, хэцүү болгодог. Гэхдээ алдааг үл тоомсорлох нь асуудлыг зүгээр л хивсний доор шүүрдэж, сэжиггүй хэрэглэгч хэзээ нэгэн цагт үүнийг олох болно.

Дүрэм 6. Кодоо богино, тусдаа хэсгүүдэд хуваа.

Арга, функц, кодын блок бүр нь ердийн дэлгэцийн цонхонд (25-50 мөр) багтах ёстой. Хэт урт байвал богино хэсэг болгон хайчилж ав. Аргын дотор ч гэсэн урт кодыг блок болгон хувааж, мөн чанарыг нь блок бүрийн эхэнд байгаа тайлбар дээр тайлбарлаж болно.

Түүнээс гадна анги, модуль, файл эсвэл процесс бүр тодорхой төрлийн ажлыг гүйцэтгэх ёстой. Хэрэв кодын хэсэг нь огт өөр ажил гүйцэтгэж байвал зохих хэмжээгээр хуваана.

Дүрэм 7. Framework API болон гуравдагч этгээдийн номын санг ашиглах.

Өөрийн хүрээний API-ээр дамжуулан ямар боломжуудыг авах боломжтойг мэдэж аваарай. мөн түүнчлэн гуравдагч талын дэвшилтэт номын сангууд юу хийж чадах вэ. Хэрэв номын сангууд таны системийн багц менежерээр дэмжигддэг бол тэдгээр нь байх магадлалтай сайн сонголт. Дугуйг дахин зохион бүтээхэд саад болох кодыг ашигла (хэрэггүй дөрвөлжин хэлбэртэй).

Дүрэм 8. Загварыг бүү хэтрүүл.

Зөвхөн одоо хамааралтай зүйлийг л загварчлаарай. Таны кодыг дэмжихийн тулд нэлээд ерөнхий болгож болно Цаашдын хөгжил, гэхдээ энэ нь үүнийг хэтэрхий төвөгтэй болгохгүй тохиолдолд л болно. Бүр байхгүй асуудлуудыг шийдэхийн тулд параметржүүлсэн анги, үйлдвэр, гүн шатлал, далд интерфейсийг бүү үүсгэ - маргааш юу болохыг та тааж чадахгүй. Нөгөөтэйгүүр, кодын бүтэц нь даалгаварт тохирохгүй байвал түүнийг дахин засварлаж болно.

Дүрэм 9: Тогтвортой бай.

Үүнтэй ижил аргаар ижил зүйлийг хий. Хэрэв та үйл ажиллагаа нь одоо байгаа аргатай төстэй аргыг боловсруулж байгаа бол ижил төстэй нэр, ижил төстэй параметрийн дараалал, ижил төстэй биеийн бүтцийг ашиглана уу. Ангиудад ч мөн адил хамаарна. Ижил төстэй талбарууд болон аргуудыг үүсгэж, тэдгээрт ижил төстэй интерфэйсүүд өгч, ижил төстэй ангиудад байгаа шинэ нэрсийг буулга.

Таны код нь таны хүрээний конвенцид нийцсэн байх ёстой. Жишээлбэл, хүрээг хагас нээлттэй болгох нь сайн туршлага юм: зүүн талд хаалттай (хамааруулсан) (хүрээний эхэнд), баруун талд (төгсгөлд) нээлттэй (онцгой). Хэрэв тодорхой тохиолдолд ямар ч тохиролцоо байхгүй бол сонголтоо хийж, үүнтэй холбоотой байх ёстой.

Дүрэм 10 Аюулгүй байдлын асуудлаас зайлсхий.

Орчин үеийн код нь тусдаа ажиллах нь ховор. Тэрээр дайралтын бай болох зайлшгүй эрсдэлтэй. Тэд интернетээс ирэх шаардлагагүй; халдлага нь таны програмын оролтоор тохиолдож болно. Таны програмчлалын хэл болон домэйноос хамааран та буферийн хэт ачаалал, сайт хоорондын скрипт, SQL тарилга болон бусад асуудлын талаар санаа зовох хэрэгтэй байж магадгүй юм. Эдгээр асуудлуудыг судалж, кодоороо зайлсхийх хэрэгтэй. Энэ нь хэцүү биш юм.

Дүрэм 11 Өгөгдлийн бүтэц, алгоритмыг үр ашигтай ашиглах.

Энгийн кодыг хадгалах нь үр ашгийн үүднээс өөрчилсөн кодоос илүү хялбар байдаг. Аз болоход, та өөрийн хүрээний өгсөн өгөгдлийн бүтэц, алгоритмуудыг ашиглан засвар үйлчилгээ болон үр ашгийг тэнцвэржүүлж чадна. Тэдэнтэй ажиллах газрын зураг, багц, вектор болон алгоритмуудыг ашигла. Энэ нь таны кодыг илүү цэвэр, хурдан, өргөтгөх боломжтой, санах ойг илүү үр ашигтай болгоно. Жишээлбэл, хэрэв та эрэмбэлэгдсэн багцад мянган утгыг хадгалах юм бол огтлолцлын үйлдлийг олох болно нийтлэг элементүүдсая харьцуулалтаар биш, ижил тооны үйлдлээр өөр багцтай.

Дүрэм 12: Нэгжийн тестийг ашигла.

Орчин үеийн программ хангамжийн нарийн төвөгтэй байдал нь суулгахад илүү үнэтэй бөгөөд туршихад хэцүү болгодог. Бүтээмжтэй арга бол код бүрийг ажлын зөв эсэхийг шалгадаг тестүүдтэй хамт дагалдах явдал юм. Энэ арга нь дибаг хийхийг хялбаршуулдаг, учир нь Энэ нь алдааг эрт илрүүлэх боломжийг олгодог. Python, JavaScript зэрэг динамикаар бичигдсэн хэлээр программчлах үед нэгжийн тест нь маш чухал бөгөөд учир нь тэдгээр нь зөвхөн ажиллах үед л алдаа гаргадаг бол Java, C#, C++ зэрэг статик хэлбэрээр бичигдсэн хэлүүд ажиллах үед заримыг нь барьж чаддаг. Нэгжийн тест нь кодыг итгэлтэйгээр дахин засах боломжийг олгодог. Та XUnit-ийг ашиглан тест бичих, гүйцэтгэлийг автоматжуулахад хялбар болгох боломжтой.

Дүрэм 13: Кодыг зөөврийн байдлаар хадгалах.

Хэрэв танд онцгой шалтгаан байхгүй бол зөвхөн тодорхой платформ дээр ашиглах боломжтой функцийг бүү ашигла. Энэ тохиргоо нь платформ дээр өөр өөр байдаг тул тодорхой урттай (жишээ нь 32 бит) байхын тулд тодорхой төрлийн өгөгдлийн төрлүүдэд (бүхэл тоо, заагч, цагийн тэмдэг гэх мэт) найдаж болохгүй. Програмын мессежийг код, хатуу кодын соёлд хамаарах тохиргоог (жишээ нь, аравтын болон бүхэл тоо тусгаарлагч эсвэл огнооны формат) тусад нь байлга. Кодыг өөр өөр улс оронд ажиллуулахын тулд гэрээ хэлэлцээр хийх шаардлагатай тул нутагшуулах ажлыг аль болох өвдөлтгүй болго.

Дүрэм 14: Кодоо бүтээх боломжтой болго.

Энгийн команд нь таны кодыг түгээхэд бэлэн маягт болгон эмхэтгэх ёстой. Энэ тушаал нь танд шаардлагатай тестүүдийг хурдан хийж, ажиллуулах боломжийг олгоно. Үүнд хүрэхийн тулд Make , Apache Maven эсвэл Ant гэх мэт автоматжуулсан бүтээх хэрэгслийг ашиглана уу. Хамгийн тохиромжтой нь та өөрийн кодыг өөрчлөх болгонд нь шалгаж, бүтээж, шалгах интеграцийн системийг бий болгох хэрэгтэй.

Дүрэм 15: Бүх зүйлийг хувилбарын хяналтанд оруул.

Таны бүх элементүүд - код, баримт бичиг, хэрэгслийн эх сурвалж, бүтээх скрипт, туршилтын өгөгдөл - эх сурвалжийн хяналтанд байх ёстой. Git болон GitHub нь энэ ажлыг хямд бөгөөд асуудалгүй болгодог. Гэхдээ бусад олон хүчирхэг хэрэгсэл, үйлчилгээг танд ашиглах боломжтой. Та програмаа репозитороос татаж аваад тохируулсан систем дээр бүтээж, туршиж үзэх боломжтой байх ёстой.

Дүгнэлт.

Эдгээр 15 дүрмийг өдөр тутмын дасгалынхаа нэг хэсэг болгосноор та уншихад хялбар, сайн шалгагдсан, зөв ​​ажиллах боломжтой, цаг нь ирэхэд өөрчлөхөд илүү хялбар кодтой болно. Мөн та өөрийгөө болон хэрэглэгчдийнхээ толгойны өвчинг аврах болно.