Architecture Decision Record

Active theme: Light

← ຕົວຢ່າງບັນທຶກການຕັດສິນໃຈ

ພາສາການຂຽນໂປຣແກຣມ

ສາລະບານ:

ບົດສະຫຼຸບ

ບັນຫາ

ພວກເຮົາຕ້ອງເລືອກພາສາການຂຽນໂປຣແກຣມສຳລັບຊອບແວຂອງພວກເຮົາ. ພວກເຮົາມີສອງຄວາມຕ້ອງການຫຼັກ: ພາສາການຂຽນໂປຣແກຣມຝັ່ງໜ້າທີ່ເໝາະສຳລັບເວັບແອັບພລິເຄຊັນ ແລະ ພາສາການຂຽນໂປຣແກຣມຝັ່ງຫຼັງທີ່ເໝາະສຳລັບແອັບພລິເຄຊັນເຊີບເວີ.

ການຕັດສິນໃຈ

ພວກເຮົາເລືອກ TypeScript ສຳລັບຝັ່ງໜ້າ.

ພວກເຮົາເລືອກ Rust ສຳລັບຝັ່ງຫຼັງ.

ສະຖານະ

ຕັດສິນໃຈແລ້ວ. ພວກເຮົາເປີດຮັບທາງເລືອກໃໝ່ເມື່ອມີອອກມາ.

ລາຍລະອຽດ

ສົມມຸດຕິຖານ

ແອັບພລິເຄຊັນຝັ່ງໜ້າເປັນແບບທົ່ວໄປ:

  • ຜູ້ໃຊ້ ແລະ ການໂຕ້ຕອບທົ່ວໄປ

  • ບຣາວເຊີ ແລະ ລະບົບທົ່ວໄປ

  • ການພັດທະນາ ແລະ ການຕິດຕັ້ງທົ່ວໄປ

ແອັບພລິເຄຊັນຝັ່ງໜ້າມີແນວໂນ້ມພັດທະນາຢ່າງວ່ອງໄວ:

  • ພວກເຮົາຢາກຮັບປະກັນການພັດທະນາ, ການຕິດຕັ້ງ, ການວົນຊ້ຳ ແລະ ອື່ນໆ ທີ່ໄວ ແລະ ງ່າຍ.

  • ພວກເຮົາໃຫ້ຄຸນຄ່າກັບການພິສູດໄດ້ ເຊັ່ນ ຄວາມປອດໄພຂອງປະເພດ ແລະ ພວກເຮົາຍອມເຮັດວຽກເພີ່ມເລັກນ້ອຍເພື່ອບັນລຸມັນ.

  • ພວກເຮົາບໍ່ຕ້ອງການຄວາມເຂົ້າກັນໄດ້ກັບລະບົບເກົ່າ.

ແອັບພລິເຄຊັນຝັ່ງຫຼັງມີມາດຕະຖານສູງກວ່າທົ່ວໄປ:

  • ເປົ້າໝາຍສູງກວ່າທົ່ວໄປດ້ານຄຸນນະພາບ ໂດຍສະເພາະການພິສູດໄດ້, ຄວາມເຊື່ອຖືໄດ້, ຄວາມປອດໄພ ແລະ ອື່ນໆ.

  • ເປົ້າໝາຍສູງກວ່າທົ່ວໄປດ້ານເກືອບເວລາຈິງ ນັ້ນຄື ພວກເຮົາບໍ່ຕ້ອງການການຢຸດຊົ່ວຄາວຍ້ອນ garbage collection ຂອງເຄື່ອງເສມືນ.

  • ເປົ້າໝາຍສູງກວ່າທົ່ວໄປດ້ານການຂຽນໂປຣແກຣມແບບຟັງຊັນ ໂດຍສະເພາະສຳລັບການເຮັດວຽກຂະໜານ, ການປະມວນຜົນຫຼາຍແກນ ແລະ ຄວາມປອດໄພຂອງໜ່ວຍຄວາມຈຳ.

ພວກເຮົາຍອມຮັບຄວາມໄວໃນເວລາຄອມໄພລ໌ທີ່ຕ່ຳລົງ ເພື່ອແລກກັບຄວາມປອດໄພໃນເວລາຄອມໄພລ໌ ແລະ ຄວາມໄວໃນເວລາດຳເນີນງານ.

ຂໍ້ຈຳກັດ

ພວກເຮົາມີຂໍ້ຈຳກັດທີ່ເຂັ້ມງວດກ່ຽວກັບພາສາທີ່ໃຊ້ໄດ້ກັບບໍລິການຟັງຊັນຂອງຜູ້ໃຫ້ບໍລິການຄລາວຫຼັກ ເຊັ່ນ Amazon Lambda.

ຈຸດຢືນ

ພວກເຮົາໄດ້ພິຈາລະນາພາສາເຫຼົ່ານີ້:

  • C

  • C++

  • Clojure

  • Elixir

  • Erlang

  • Elm

  • Flow

  • Go

  • Haskell

  • Java

  • JavaScript

  • Kotlin

  • Python

  • Ruby

  • Rust

  • TypeScript

ຂໍ້ໂຕ້ແຍ້ງ

ບົດສະຫຼຸບຕໍ່ພາສາ:

  • C: ຖືກປະຕິເສດເພາະຄວາມປອດໄພຕ່ຳ; Rust ເຮັດໄດ້ດີກວ່າເກືອບທຸກຢ່າງ.

  • C++: ຖືກປະຕິເສດເພາະມັນສັບສົນວຸ່ນວາຍ; Rust ເຮັດໄດ້ດີກວ່າເກືອບທຸກຢ່າງ.

  • Clojure: ການສ້າງແບບຈຳລອງດີເລີດ; ການປະມານ Lisp ທີ່ດີທີ່ສຸດ; ເວລາດຳເນີນງານທີ່ຍອດຢ້ຽມເທິງ JVM.

  • Elixir: ເວລາດຳເນີນງານດີເລີດ ລວມທັງຄວາມສາມາດໃນການຕິດຕັ້ງ ແລະ ການເຮັດວຽກພ້ອມກັນ; ປະສົບການນັກພັດທະນາດີເລີດ; ລະບົບນິເວດຄ່ອນຂ້າງນ້ອຍ.

  • Erlang: ເວລາດຳເນີນງານດີເລີດ ລວມທັງຄວາມສາມາດໃນການຕິດຕັ້ງ ແລະ ການເຮັດວຽກພ້ອມກັນ; ປະສົບການນັກພັດທະນາທີ່ທ້າທາຍ; ລະບົບນິເວດຄ່ອນຂ້າງນ້ອຍ.

  • Elm: ເບິ່ງມີອະນາຄົດຫຼາຍ; IBM ກຳລັງເຜີຍແຜ່ກໍລະນີສຶກສາສຳຄັນທີ່ມີຜົນດີ; ລະບົບນິເວດນ້ອຍກວ່າ.

  • Flow: ການປັບປຸງທີ່ໜ້າສົນໃຈກວ່າ JavaScript; ແນວໃດກໍຕາມ; ນັກພັດທະນາກຳລັງຍ້າຍອອກຈາກມັນ.

  • Go: ປະສົບການນັກພັດທະນາດີເລີດ; ການເຮັດວຽກພ້ອມກັນດີເລີດ; ແຕ່ມີປະຫວັດການຕັດສິນໃຈທີ່ບໍ່ດີທີ່ທຳລາຍພາສາ.

  • Haskell: ພາສາແບບຟັງຊັນທີ່ດີທີ່ສຸດ; ຊຸມຊົນນັກພັດທະນານ້ອຍກວ່າ; ຍັງບໍ່ບັນລຸຄວາມສຳເລັດໃນການໃຊ້ງານຈິງທີ່ເຜີຍແຜ່ເຖິງພໍ.

  • Java: ເວລາດຳເນີນງານດີເລີດ; ລະບົບນິເວດດີເລີດ; ປະສົບການນັກພັດທະນາຕ່ຳກວ່າມາດຕະຖານ.

  • JavaScript: ພາສາທີ່ນິຍົມທີ່ສຸດຕະຫຼອດການ; ລະບົບນິເວດທີ່ແຜ່ຫຼາຍທີ່ສຸດ.

  • Kotlin: ແກ້ໄຂຫຼາຍຢ່າງຂອງ Java; ການສະໜັບສະໜູນທີ່ດີເລີດຈາກ JetBrains; ມີກໍລະນີທີ່ເຜີຍແຜ່ແລ້ວທີ່ດີກ່ຽວກັບການຍ້າຍຈາກ Java ໄປ Kotlin.

  • Python: ພາສາທີ່ນິຍົມທີ່ສຸດສຳລັບການບໍລິຫານລະບົບ; ເຄື່ອງມືວິເຄາະທີ່ດີເລີດ; ເຟຣມເວີກເວັບທີ່ດີ; ແຕ່ຖືກ Google ປະຖິ້ມເພື່ອໃຊ້ Go.

  • Ruby: ປະສົບການນັກພັດທະນາທີ່ດີທີ່ສຸດຕະຫຼອດການ; ເຟຣມເວີກເວັບທີ່ດີທີ່ສຸດ; ຊຸມຊົນທີ່ໃຈດີທີ່ສຸດ; ແຕ່ຊ້າຫຼາຍ; ຄ່ອນຂ້າງຍາກໃນການຫຸ້ມຫໍ່.

  • Rust: ພາສາໃໝ່ທີ່ດີທີ່ສຸດ; ເນັ້ນນາມມະທຳແບບບໍ່ມີຕົ້ນທຶນ; ເນັ້ນການເຮັດວຽກພ້ອມກັນ; ແນວໃດກໍຕາມລະບົບນິເວດຄ່ອນຂ້າງນ້ອຍ; ແລະ ມີຂີດຈຳກັດຕັ້ງໃຈຕໍ່ການເລັ່ງຕົວຄອມໄພລ໌ບາງປະເພດ ເຊັ່ນ ການເຂົ້າເຖິງໜ່ວຍຄວາມຈຳໂດຍກົງຕ້ອງເປັນ unsafe ຢ່າງຊັດເຈນ.

  • TypeScript: ເພີ່ມປະເພດໃຫ້ JavaScript; ຕົວແປງໂຄ້ດທີ່ດີເລີດ; ນັກພັດທະນາເນັ້ນຍ້າຍຈາກ JavaScript ໄປ TypeScript ຫຼາຍຂຶ້ນ; ການສະໜັບສະໜູນທີ່ແຂງແຮງຈາກ Microsoft.

ພວກເຮົາຕັດສິນໃຈວ່າ VM ມີຊຸດຂໍ້ແລກປ່ຽນທີ່ພວກເຮົາບໍ່ຕ້ອງການໃນຕອນນີ້ ເຊັ່ນ ຄວາມຊັບຊ້ອນເພີ່ມເຕີມທີ່ໃຫ້ຄວາມສາມາດໃນເວລາດຳເນີນງານ.

ພວກເຮົາເຊື່ອວ່າການຕັດສິນໃຈຫຼັກຂອງພວກເຮົາຖືກຂັບເຄື່ອນດ້ວຍສອງຄວາມກັງວົນທີ່ຂ້າມຫຼາຍສ່ວນ:

  • ສຳລັບຄວາມໄວໃນເວລາດຳເນີນງານທີ່ໄວທີ່ສຸດ ແລະ ການເຂົ້າເຖິງລະບົບທີ່ແໜ້ນທີ່ສຸດ ພວກເຮົາຈະເລືອກ JavaScript ແລະ C.

  • ສຳລັບຄວາມໄວໃນເວລາດຳເນີນງານທີ່ເກືອບໄວທີ່ສຸດ ແລະ ການເຂົ້າເຖິງລະບົບທີ່ເກືອບແໜ້ນທີ່ສຸດ ພວກເຮົາເລືອກ TypeScript ແລະ Rust.

ການກ່າວເຖິງກຽດຕິຍົດໄປຫາພາສາ VM ແລະ ເຟຣມເວີກເວັບທີ່ພວກເຮົາຈະເລືອກຖ້າພວກເຮົາຕ້ອງການພາສາ VM:

  • Clojure ແລະ Luminus

  • Java ແລະ Spring

  • Elixir ແລະ Phoenix

ຜົນໄດ້ຮັບ

ນັກພັດທະນາຝັ່ງໜ້າຈະຕ້ອງຮຽນ TypeScript. ນີ້ອາດເປັນເສັ້ນໂຄ້ງການຮຽນຮູ້ທີ່ງ່າຍ ຖ້າປະສົບການຫຼັກຂອງນັກພັດທະນາແມ່ນການໃຊ້ JavaScript.

ນັກພັດທະນາຝັ່ງຫຼັງຈະຕ້ອງຮຽນ Rust. ນີ້ອາດເປັນເສັ້ນໂຄ້ງການຮຽນຮູ້ປານກາງ ຖ້າປະສົບການຫຼັກຂອງນັກພັດທະນາແມ່ນການໃຊ້ C/C++ ແລະ ເປັນເສັ້ນໂຄ້ງການຮຽນຮູ້ທີ່ຍາກ ຖ້າປະສົບການຫຼັກຂອງນັກພັດທະນາແມ່ນການໃຊ້ Java, Python, Ruby ຫຼື ພາສາທີ່ມີການຈັດການໜ່ວຍຄວາມຈຳທີ່ຄ້າຍກັນ.

TypeScript ແລະ Rust ທັງສອງຄ່ອນຂ້າງໃໝ່. ນັ້ນໝາຍຄວາມວ່າເຄື່ອງມືຫຼາຍຢ່າງຍັງບໍ່ມີເອກະສານສຳລັບພາສາເຫຼົ່ານີ້. ຕົວຢ່າງ ທໍ່ devops ຈະຕ້ອງຖືກຕັ້ງຄ່າສຳລັບພາສາເຫຼົ່ານີ້ ແລະ ມາຮອດຕອນນີ້ ບໍ່ມີເຄື່ອງມື devops ໃດທີ່ພວກເຮົາກຳລັງປະເມີນມີຕົວຢ່າງເລີ່ມຕົ້ນສຳລັບພາສາເຫຼົ່ານີ້.

ເວລາຄອມໄພລ໌ຂອງ TypeScript ແລະ Rust ຊ້າຫຼາຍ. ສ່ວນໜຶ່ງຂອງສິ່ງນີ້ອາດເປັນຍ້ອນຄວາມໃໝ່ຂອງພາສາ. ພວກເຮົາອາດຕ້ອງເບິ່ງວິທີບັນເທົາເວລາຄອມໄພລ໌ທີ່ຊ້າ ເຊັ່ນ ໂດຍການຄອມໄພລ໌ຕາມຄວາມຕ້ອງການ, ການຄອມໄພລ໌ພ້ອມກັນ ແລະ ອື່ນໆ.

ການສະໜັບສະໜູນ IDE ສຳລັບພາສາເຫຼົ່ານີ້ຍັງບໍ່ແຜ່ຫຼາຍ ແລະ ຍັງບໍ່ເປັນຊັ້ນໜຶ່ງ. ຕົວຢ່າງ JetBrains ຂາຍ IDE PyCharm ເພື່ອການສະໜັບສະໜູນ Python ຊັ້ນໜຶ່ງ ແຕ່ບໍ່ຂາຍ IDE ທີ່ມີການສະໜັບສະໜູນ Rust ຊັ້ນໜຶ່ງ; ແທນທີ່ຈະເປັນແນວນັ້ນ JetBrains ສາມາດໃຊ້ປລັກອິນ Rust ທີ່ໃຫ້ການສະໜັບສະໜູນພາສາ Rust ປະມານ 80% ເມື່ອທຽບກັບການສະໜັບສະໜູນພາສາ Python.

ທີ່ກ່ຽວຂ້ອງ

ການຕັດສິນໃຈທີ່ກ່ຽວຂ້ອງ

ພວກເຮົາຈະມຸ່ງໄປສູ່ທາງເລືອກລະບົບນິເວດທີ່ສອດຄ່ອງກັບພາສາເຫຼົ່ານີ້.

ຕົວຢ່າງ ພວກເຮົາຢາກເລືອກ IDE ທີ່ມີຄວາມສາມາດດີສຳລັບພາສາເຫຼົ່ານີ້.

ຕົວຢ່າງ ສຳລັບເຟຣມເວີກເວັບຝັ່ງໜ້າຂອງພວກເຮົາ ພວກເຮົາມີແນວໂນ້ມຈະຕັດສິນໃຈເລືອກເຟຣມເວີກທີ່ມຸ່ງໄປທາງ TypeScript (ເຊັ່ນ Vue) ຫຼາຍກວ່າເຟຣມເວີກທີ່ມຸ່ງໄປທາງ JavaScript ທຳມະດາ (ເຊັ່ນ React).

ຄວາມຕ້ອງການທີ່ກ່ຽວຂ້ອງ

ຊຸດເຄື່ອງມືທັງໝົດຂອງພວກເຮົາຕ້ອງຮອງຮັບພາສາເຫຼົ່ານີ້.

ຜະລິດຕະພັນທີ່ກ່ຽວຂ້ອງ

ພວກເຮົາຄາດວ່າພວກເຮົາອາດສົ່ງອອກຂໍ້ມູນລັບບາງຢ່າງໄປເປັນຕົວແປສະພາບແວດລ້ອມ.

ຫຼັກການທີ່ກ່ຽວຂ້ອງ

ວັດສອງເທື່ອ ຕັດເທື່ອດຽວ. ພວກເຮົາໃຫ້ບູລິມະສິດກັບຄວາມປອດໄພບາງຢ່າງຫຼາຍກວ່າຄວາມໄວບາງຢ່າງ.

ເວລາດຳເນີນງານມີຄ່າກວ່າເວລາຄອມໄພລ໌. ພວກເຮົາໃຫ້ບູລິມະສິດກັບການໃຊ້ງານຂອງລູກຄ້າຫຼາຍກວ່າການໃຊ້ງານຂອງນັກພັດທະນາ.

ໝາຍເຫດ

ໝາຍເຫດໃດໆໃສ່ຢູ່ນີ້.