Yunit 1 / 12

Panimula sa Artificial Intelligence at Verification Discipline sa Computer Engineering

Mga nadagdag:

  • Kakayahang makilala kung saan nagbibigay ang AI ng tunay na bilis sa lifecycle ng pagbuo ng software at kung saan nananatili ang desisyon at responsibilidad sa engineer
  • Kakayahang maglapat ng tatlong-layered na disiplina sa engineering na nagpapatunay sa bawat code at disenyo na ginawa sa pamamagitan ng compilation, pagsubok at pagsusuri.
  • Ugaliing linisin ang konteksto para magamit ang AI nang hindi nagbabahagi ng kumpidensyal na source code, mga kredensyal, at data ng customer

Kapag tiningnan mo ang araw ng isang computer engineer, ang larawan ay katulad sa karamihan ng mga team: pag-unawa sa isang kahilingan sa negosyo, pagdidisenyo, pagsusulat ng code, pagbabasa ng code ng ibang tao, pag-debug (ang proseso ng pag-alam kung bakit hindi gumagana ang isang programa at inaayos ito), pagsulat ng mga pagsusulit, paghahanda ng dokumentasyon, pagsusuri ng code, at pagdalo sa mga pulong. Sa madaling salita, ang oras na inilaan sa tunay na "paghuhusga sa engineering", iyon ay, kung ang isang solusyon ay tama, ligtas at napapanatiling, ay durog sa ilalim ng paulit-ulit na gawain. Dito pumapasok ang artificial intelligence (AI para sa maikli; software na gumagana sa text at code na may malaking modelo ng wika). Ang AI ay hindi gumagawa ng desisyon para sa iyo; Inihahanda ka nito para sa desisyon, gumagawa ng code skeleton, pinapaliit ang bug at naglalagay ng nakatrabahong draft sa harap mo. Sa buong module na ito, ipoposisyon namin ang AI hindi bilang isang "awtomatikong programmer" ngunit bilang isang disiplinadong pares na kasosyo sa programming na ang output ay pinagsama-sama, sinusuri at sinusuri sa bawat oras.

Sa unang yunit na ito, nililinaw namin ang tatlong bagay: Sa anong mga yugto ng lifecycle ng pagbuo ng software (ang mga yugto na dinadaanan ng software mula sa ideya hanggang sa produksyon: pagsusuri, disenyo, coding, pagsubok, deployment, pagpapanatili) ang AI ay nagdaragdag ng tunay na halaga; kung aling mga desisyon ang dapat na mahigpit na manatili sa engineer; at ano ang verification at confidentiality discipline na dapat mong sundin kapag ginagawa ito. Kung wala ang bubong na ito na naka-install nang tama, ang mga diskarte sa kasunod na mga yunit ay maaaring maging mapanganib; Dahil ang isang error sa software ay umaabot sa milyun-milyong user sa parehong oras at maaaring maging isang kahinaan sa seguridad.

Mga Konsepto: Hallucination: Ang nakakumbinsi na paggawa ng AI ng isang pamamaraan, library, API, o pag-uugali na hindi aktwal na umiiral. Konteksto: Ang input na ibibigay mo sa AI (code, mensahe ng error, kinakailangan, mga hadlang). Pagpapatunay: Sinusuri ang output sa isang malayang paraan (pagsasama-sama, pagsubok, dokumentasyon). Ang tatlong konseptong ito ang sandigan ng buong modyul.

Sa Aling Mga Negosyo Ang AI Accelerator, Sa Aling Mga Negosyo Ito Mapanganib?

Ang mga trabaho sa software ay nahuhulog sa isang dalawang-pronged spectrum sa mga tuntunin ng mga kinalabasan. Sa isang dulo ay nababaligtad, mababang panganib na paghahanda; Sa kabilang dulo, may mga mahirap ibalik na gawain na pumapasok sa kapaligiran ng produksyon at maaaring magdulot ng pagkawala ng data, mga kahinaan sa seguridad o pagkaantala. Ang halaga ng AI ay nag-iiba depende sa kung saan ka nakatayo sa spectrum na ito.

uri ng negosyo

kontribusyon ng AI

Papel ng engineer

Code skeleton / boilerplate

Mabilis na pagbuo ng paulit-ulit na istraktura

Logic at kontrol sa katayuan sa gilid

pag-debug

Hypothesis at listahan ng posibleng dahilan

Pagpaparami at pagkumpirma ng sanhi ng ugat

mga pagsusulit sa pagsulat

Pagsubok ng draft at paggawa ng senaryo

Makabuluhang paggigiit at pagsusuri sa saklaw

refactoring

Refactoring proposal

Pagpapanatili ng pag-uugali sa pamamagitan ng pagsubok

Dokumentasyon

Unang draft at istraktura

Pagsusuri ng kawastuhan laban sa code

Desisyon sa arkitektura/seguridad

Listahan ng mga pagpipilian at kalamangan at kahinaan

Huling desisyon at responsibilidad

Ang panuntunan ay simple: ang panganib ng isang output ng AI ay katumbas ng pinsalang matatanggap nito kung ang output ay nagkamali. Ang hindi wastong pagmumungkahi ng variable na pangalan ay hindi nakakapinsala; Ang hindi wastong pagpapatotoo (pagsusuri kung ang gumagamit ay talagang kung sino ang kanilang inaangkin) ay ginagawang masusugatan ang buong system. Kaya ang unang tanong na itatanong bago gamitin ang output ay: "Ano ang mangyayari kung mali ito at sino ang nakapansin nito at kailan?"

Pag-iingat: Ang AI ay gumagawa ng matatas at kumpiyansa na code. Ang katatasan ay hindi garantiya ng katumpakan. Ang isang modelo ng wika ay maaaring kapani-paniwalang makagawa ng isang pangalan ng function na hindi aktwal na umiiral, isang maling sequence ng parameter, o kahit isang hindi ligtas na pattern. Sa software, hindi ito nananatili sa papel; Ito ay nag-compile, tumatakbo, at sumasabog sa produksyon.

Mga Desisyon na Dapat Ipaubaya sa Engineer

Ang ilang mga desisyon ay hindi dapat maging ganap na awtomatiko; nagdadala ng teknikal, legal at etikal na mga panganib:

  • Pag-apruba para sa produksyon: Ang paglabas ng isang code sa produksyon at ang responsibilidad para dito.
  • Seguridad at arkitektura: Mga mamahaling desisyon gaya ng pagpapatotoo, awtorisasyon, pag-encrypt at modelo ng data.
  • Lisensya at copyright: Usability ng ginawang code sa komersyal na produkto at pagsunod sa lisensya.
  • Paggawa gamit ang kumpidensyal na data: Mga transaksyon sa data ng customer, mga lihim ng source code at impormasyon ng pagkakakilanlan.
Babala: Kahit na sabihin ng AI "ang code na ito ay ligtas at handa na para sa produksyon", ang pagtanggap nito nang walang pagsubok sa seguridad, pagsusuri ng code at pagpapatunay sa ilalim ng totoong pagkarga ay hindi katanggap-tanggap. Sa gawaing kritikal sa kaligtasan, ang output ng AI ay hindi kailanman kapalit ng pag-apruba mula sa isang karampatang inhinyero; Ang anumang output na humahantong sa isang desisyon ay dapat na independiyenteng ma-verify at maaprubahan ng awtorisadong engineer bago ang pagpapatupad.

Disiplina sa Pagpapatunay: Kontrol sa Tatlong Layer

Maglapat ng tatlong layer ng kontrol upang magamit ang output ng AI tulad ng isang senior reviewer sa halip na walang taros. Ito ang pangunahing reflex na uulitin natin sa buong module.

  1. Compilation at static checking: Talaga bang nag-compile/run ang code? Mayroon bang mga error sa uri, hindi nagamit na mga variable, hindi umiiral na mga API? Ano ang sinasabi ng static analysis tool (ang tool na sumusuri sa code nang hindi ito pinapatakbo)?
  2. Independent reproduction (testing): Patakbuhin ang code na may maliliit, kilalang input at tingnan kung nakuha mo ang inaasahang output. Subukan ang mga edge case (null, zero, negatibo, malaki).
  3. Pag-verify ng pinagmulan: Ang bawat API, bersyon ng library, at feature ng wika na ginagamit ng AI ay dapat ma-verify mula sa opisyal na dokumentasyon.

Prompt ng pag-verify (pinadadali ang pagsuri sa output): "Ilista ang LAHAT ng mga panlabas na aklatan, pamamaraan, at mga feature ng wika na ginagamit mo sa iyong code. Para sa bawat isa, isaad kung saang bersyon ito available at lagyan ng label na 'dapat itong ma-verify mula sa dokumentasyon'. Huwag gumawa ng anumang mga API na hindi ka sigurado; kung hindi ka sigurado, malinaw na isulat ang 'hindi sigurado'. Ilista din ang anumang edge na listahan ng mga kaso na mayroon ka."

I-critique ang sarili mong code prompt: "Tingnan nang kritikal ang code na kakasulat mo lang, tulad ng isang senior engineer na kumuha sa iyo. Magbigay ng mga konkretong item sa ilalim ng tatlong heading na ito: (1) logic/edge case error, (2) security risks, (3) performance o readability problem. Para sa bawat item, isulat ang 'bakit ang problema' at 'iminungkahing ayusin'. Kung walang problema, 'wag mo nang subukang 'I could embellish';'

Mahina Prompt / Malakas na Prompt

MAHINA:"Sumulat ako ng function ng pagpapatunay ng user."(Resulta: hindi malinaw kung aling wika, aling panuntunan, aling pag-uugali ng error; generic na code, kadalasang hindi secure o wala sa konteksto.) MALAKAS: "Sumulat ng email validation function para sa Python 3.11. Input: string. Output: True kung valid, False kung hindi. Panuntunan: walang laman na string na pagsunod sa hindi kinakailangan, HINDI kinakailangan ang isang walang laman na string ng library Mali; Walang kinakailangang RFC na format ng library. 5-sample na pagsubok sa ibaba ng function append block: wasto, walang laman, walang '@', double '@', na naglalaman ng mga puwang lamang."

Ang pagkakaiba ay nasa konteksto. Napakahusay na prompt; Kabilang dito ang wika, bersyon, kontrata ng input-output, mga hadlang, at inaasahan sa pagsubok. Ang nag-iisang disiplinang ito ay lubos na nakakabawas sa panganib ng mga guni-guni at hindi ligtas na code.

Mga Mini Case

Case 1 — Nilikhang paraan. Narinig ng isang developer mula sa AI na mayroong isang paraan na tinatawag na date.addBusinessDays(5) sa isang library ng petsa at ito ay ipinaliwanag sa isang kumpiyansa na paraan. Sa pagtingin sa dokumentasyon, nakikita niya na walang ganoong paraan, ang tamang paraan ay isang manu-manong loop. Nakukuha ang hallucination bago ito pumasok sa produksyon na may 10 minutong pag-verify.

Kaso 2 — Pagkawala ng estado ng gilid. Gumagawa ang AI ng function na "kalkulahin ang average"; Gumagana ito kapag sinubukan gamit ang 1,000 row ng data. Gayunpaman, kapag ang listahan ay walang laman, nagbibigay ito ng dibisyon sa pamamagitan ng zero error. Dahil idinagdag ng engineer ang walang laman na pagsubok sa input, nakikita at inaayos niya ang error bago ito mag-live. Pinipigilan ng isang pagsubok sa kundisyon sa gilid ang isang alarma sa produksyon sa 3am.

Kaso 3 — Panganib sa privacy. Ang isang eksperto ay malapit nang mag-paste ng isang file na may aktwal na string ng koneksyon sa database at API key sa isang pampublikong tool. Naaalala ang patakaran ng institusyon; Pinapalitan nito ang mga lihim ng <REDACTED>, binabawasan ang code sa isang halimbawang kinatawan, at hinihiling ito. Kaya, nakakakuha siya ng tulong sa loob ng 5 minuto, ngunit hindi lumalabas ang kanyang impormasyon sa pagkakakilanlan.

Prinsipyo ng Paggawa gamit ang Lihim na Kodigo at Impormasyon sa Pagkakakilanlan

Ang pinakasensitibong bahagi ng software; mga lihim ng source code, impormasyon ng pagkakakilanlan (API key, password, token) at customer/personal na data. Pangunahing prinsipyo: linisin bago ibahagi, tanungin lamang ang kakanyahan ng problema na may isang kinatawan na halimbawa kung maaari.

Anonymised prompt pattern: "May error sa sumusunod na function. Pinalitan ko ang aktwal na business logic at hidden constants ng mga representative values (API key, table names, field namesgeneric). Problema: Nakakuha ako ng error Y sa input X. Hanapin lang ang logic error sa representative code na ito at ipaliwanag ang naitama na bersyon. [representative code]"

Tip: Kung may pagdududa, sagutan ang pagsusulit na ito: "Magkakaroon ba ng problema ang aking organisasyon kung isinulat ko ito sa publiko sa isang forum?" Kahit na hindi malinaw ang sagot, i-clear muna ito. Ang pag-reset ay palaging mas mura kaysa sa paghabol sa pagtagas sa ibang pagkakataon.

Mga karaniwang pagkakamali

  • Gamit ang output nang walang pag-compile/pagsubok. Ang "sumulat ng AI" ay hindi isang katwiran; Ang bawat piraso ng code ay na-verify sa pamamagitan ng pagpapatakbo nito.
  • Paggawa ng mga kahilingan nang walang konteksto. Kung ang wika, bersyon, input-output at mga hadlang ay hindi ibinigay, ang code ay nagiging generic at kadalasang hindi secure.
  • Pagbabahagi ng kumpidensyal na impormasyon nang hindi nag-iisip. Ang API key, password at data ng customer ay hindi dapat ilabas nang hindi na-clear.
  • Nakalilito ang tumpak na wika na may katumpakan. Kung mas tiwala ang AI ay nagsasalita, mas dapat kang maging maingat; Ang tono ng kumpiyansa ay hindi katibayan.
  • Pagdelegasyon ng desisyon sa AI. Ang desisyon na ilagay sa produksyon, seguridad at arkitektura ay nananatili sa engineer; Gumagawa lamang ang AI ng mga materyales.

Sa buod

Pinapabilis ng AI ang paulit-ulit at nakakaubos ng oras na bahagi ng software work: skeleton code, test drafting, bug narrowing, dokumentasyon. Gayunpaman, ang desisyon at responsibilidad ay nananatili sa engineer. Ang bawat output ay dapat pumasa sa tatlong layer ng kontrol (compile/static, testing, source). Ang pagsulat ng mga senyas na may konteksto at pag-clear ng nakatagong impormasyon ay dalawang pangunahing gawi na uulitin natin sa bawat yunit ng modyul na ito. Kapag gumamit ka ng AI nang may disiplina, nakakakuha ka ng bilis; kapag ginamit mo ito nang walang disiplina, nagdadala ka ng mga pagkakamali at kahinaan sa produksyon.

Gawain ng aplikasyon

Pumili ng isang maliit na gawain sa pag-coding mula sa iyong sariling gawa o mula sa isang haka-haka na proyekto (hal. isang pagpapatunay na function). Sumulat muna ng mahinang prompt at kunin ang output. Pagkatapos ay ilapat ang malakas na pattern ng prompt mula sa unit na ito: magdagdag ng wika/bersyon, kontrata ng input-output, mga hadlang, at inaasahan sa pagsubok. Ilagay ang dalawang printout na magkatabi at isulat ang pagkakaiba. Pagkatapos ay i-compile ang matatag na output at subukan ito ng hindi bababa sa tatlong edge case (null, zero/negatibo, hindi inaasahang format) at tandaan kung ano ang makikita mo sa kung aling pagsubok.

checklist

  • [ ] Nagdagdag ako ng wika, bersyon at kontrata ng input-output sa prompt.
  • [ ] Isinulat ko ang "Huwag kang gumawa, sabihin sa akin kung hindi ka sigurado" at ang limitasyon sa saklaw.
  • [ ] Binuo/pinatakbo ko ang code, nagsuri para sa mga static na babala.
  • [ ] Sinubukan ko ng hindi bababa sa tatlong gilid na mga kaso.
  • [ ] Na-verify ko ang mga API na ginamit mula sa opisyal na dokumentasyon.
  • [ ] Na-clear ko ang anumang lihim na code/kredential o ginamit na tool ng enterprise.
  • [ ] Kinumpirma ko na ang desisyon na ilagay sa produksyon at seguridad ay nananatili sa tao.