Vim Li Cas Mus Tsis Zoo rau Unsmart Programmers

Kab lus tau sau ua lus teb rau ib qho kev luam tawm yav dhau los kab lus antipodean.

Vim Li Cas Mus Tsis Zoo rau Unsmart Programmers

Ob xyoos dhau los no kuv tau siv Go los siv RADIUS tus neeg rau zaub mov tshwj xeeb nrog cov txheej txheem sau nqi. Nyob rau hauv txoj kev, kuv tab tom kawm cov intricacies ntawm cov lus nws tus kheej. Cov kev pab cuam lawv tus kheej yog qhov yooj yim heev thiab tsis yog lub hom phiaj ntawm tsab xov xwm no, tab sis kev paub ntawm kev siv Go nws tus kheej tsim nyog ob peb lo lus hauv nws qhov kev tiv thaiv. Go tau dhau los ua cov lus tseem ceeb ntxiv rau qhov loj, scalable code. Cov lus tau tsim los ntawm Google, qhov twg nws tau siv zog. Cov kab hauv qab no, kuv ua siab ncaj xav tias qhov tsim ntawm Go lus tsis zoo rau UNintelligent programmers.

Tsim los rau cov programmer tsis muaj zog?

Cov tsis muaj zog hais txog teeb meem. Cov lus muaj zog hais txog cov tswv yim thiab kev npau suav ...

Mus yog qhov yooj yim heev rau kev kawm, yog li yooj yim uas koj tuaj yeem nyeem cov cai uas tsis muaj kev cob qhia txhua. Cov yam ntxwv ntawm cov lus no yog siv nyob rau hauv ntau lub tuam txhab thoob ntiaj teb thaum cov cai nyeem ua ke nrog cov kws tshaj lij uas tsis yog cov tub ntxhais kawm (cov thawj coj, cov neeg siv khoom, thiab lwm yam). Qhov no yog qhov yooj yim heev rau cov txheej txheem xws li Tsim Tsav Tsim Kev Txhim Kho.
Txawm tias novice programmers pib tsim cov cai zoo tom qab ib lub lim tiam lossis ob. Phau ntawv kuv kawm los ntawm yog "Go Programming" (los ntawm Mark Summerfield). Phau ntawv yog zoo heev, nws kov ntawm ntau nuances ntawm cov lus. Tom qab tsis tsim nyog cov lus nyuaj xws li Java, PHP, qhov tsis muaj khawv koob yog rov ua dua tshiab. Tab sis tsis ntev los sis tom qab, ntau tus programmers txwv tsis pub muaj lub tswv yim ntawm kev siv cov txheej txheem qub hauv thaj chaw tshiab. Qhov no puas tsim nyog?

Rob Pike (lub ntsiab lus tseem ceeb ntawm cov lus) tsim cov lus Go ua hom lus uas yooj yim to taub thiab siv tau zoo. Cov lus yog tsim los rau kev tsim khoom siab tshaj plaws hauv pab pawg loj thiab tsis muaj qhov tsis ntseeg txog nws. Ntau tus novice programmers yws tias muaj ntau yam uas lawv ploj lawm. Qhov kev ntshaw rau kev yooj yim no yog kev txiav txim siab los ntawm cov lus tus tsim qauv, thiab txhawm rau nkag siab tag nrho vim li cas nws thiaj li xav tau, peb yuav tsum nkag siab txog kev txhawb siab ntawm cov neeg tsim khoom thiab lawv tau sim ua tiav hauv Go.

Yog li vim li cas nws thiaj li yooj yim? Nov yog ob peb nqe lus los ntawm Rob Pike:

Lub ntsiab lus tseem ceeb ntawm no yog tias peb cov programmer tsis yog cov kws tshawb fawb. Lawv, raws li txoj cai, cov hluas, tuaj rau peb tom qab kawm, tej zaum lawv kawm Java, lossis C / C ++, lossis Python. Lawv tsis tuaj yeem nkag siab cov lus zoo, tab sis tib lub sijhawm peb xav kom lawv tsim software zoo. Yog li ntawd, cov lus yuav tsum yooj yim to taub thiab kawm.

Nws yuav tsum paub, hais lus zoo ib yam li C. Cov programmers ua haujlwm hauv Google pib lawv txoj haujlwm ntxov thiab feem ntau paub txog cov lus txheej txheem, tshwj xeeb yog tsev neeg C. Qhov yuav tsum tau ua kom muaj txiaj ntsig sai hauv cov lus programming tshiab txhais tau hais tias cov lus yuav tsum tsis txhob dhau mus dhau.

Cov lus txawj ntse, puas yog?

Artifacts ntawm Simplicity

Simplicity yog qhov tsim nyog rau kev zoo nkauj. Lev Tolstoy.

Ua kom yooj yim yog ib lub hom phiaj tseem ceeb tshaj plaws hauv txhua qhov tsim. Raws li koj paub, ib qhov project zoo meej tsis yog ib qhov project uas tsis muaj dab tsi ntxiv, tab sis ib qho los ntawm qhov tsis muaj dab tsi tshem tawm. Ntau tus neeg ntseeg tias txhawm rau daws (lossis txawm hais tawm) cov teeb meem nyuaj, yuav tsum muaj cov cuab yeej nyuaj. Txawm li cas los xij, tsis yog. Cia peb coj cov lus PERL piv txwv. Cov kws tshaj lij hais lus tau ntseeg tias tus programmer yuav tsum muaj tsawg kawg peb txoj hauv kev los daws ib qho teeb meem. Cov ideologists ntawm Go lus coj txoj kev sib txawv; lawv txiav txim siab tias ib txoj kev, tab sis ib qho zoo tiag tiag, yog txaus kom ua tiav lub hom phiaj. Txoj hauv kev no muaj lub hauv paus loj: tib txoj kev yooj yim kawm thiab nyuaj rau tsis nco qab.

Muaj ntau tus neeg tsiv teb tsaws chaw yws tias cov lus tsis muaj cov ntsiab lus zoo nkauj. Yog lawm, qhov no yog qhov tseeb, tab sis qhov no yog ib qho zoo ntawm cov lus. Cov lus muaj qhov tsawg kawg nkaus ntawm cov khawv koob - yog li tsis muaj kev paub tob yuav tsum tau nyeem qhov kev pab cuam. Raws li rau verbosity ntawm code, qhov no tsis yog ib qho teeb meem txhua. Ib txoj haujlwm Golang sau tau zoo nyeem vertically, nrog me me lossis tsis muaj qauv. Tsis tas li ntawd, qhov ceev ntawm kev nyeem ib qhov kev pab cuam tsawg kawg yog qhov kev txiav txim ntawm qhov loj tshaj qhov ceev ntawm kev sau nws. Yog tias koj xav tias tag nrho cov cai muaj kev sib koom ua ke (ua tiav siv cov lus txib gofmt built-in), ces nyeem ob peb kab ntxiv tsis muaj teeb meem txhua.

Tsis heev nthuav

Art tsis zam thaum nws txoj kev ywj pheej raug txwv. Qhov tseeb tsis yog nws lub luag haujlwm.

Vim lub siab xav ua kom yooj yim, Mus tsis muaj kev tsim kho uas nyob rau hauv lwm yam lus yog perceived li tej yam ntuj tso los ntawm cov neeg accustomed rau lawv. Thaum xub thawj nws yuav tsis yooj yim, tab sis tom qab ntawd koj pom tias qhov kev zov me nyuam tau yooj yim dua thiab tsis paub meej dua los nyeem.

Piv txwv li, lub console utility uas nyeem stdin los yog ib cov ntaub ntawv los ntawm cov kab lus sib cav yuav zoo li no:

package main

import (
    "bufio"
    "flag"
    "fmt"
    "log"
    "os"
)

func main() {

    flag.Parse()

    scanner := newScanner(flag.Args())

    var text string
    for scanner.Scan() {
        text += scanner.Text()
    }

    if err := scanner.Err(); err != nil {
        log.Fatal(err)
    }

    fmt.Println(text)
}

func newScanner(flags []string) *bufio.Scanner {
    if len(flags) == 0 {
        return bufio.NewScanner(os.Stdin)
    }

    file, err := os.Open(flags[0])

    if err != nil {
        log.Fatal(err)
    }

    return bufio.NewScanner(file)
}

Kev daws teeb meem tib yam hauv D, txawm hais tias nws zoo li luv luv, tsis yooj yim nyeem

import std.stdio, std.array, std.conv;

void main(string[] args)
{
    try
    {
        auto source = args.length > 1 ? File(args[1], "r") : stdin;
        auto text   = source.byLine.join.to!(string);

        writeln(text);
    }
    catch (Exception ex)
    {
        writeln(ex.msg);
    }
}

Ntuj raug txim ntawm luam

Txiv neej nqa ntuj txiag teb tsaus hauv nws tus kheej. Martin Luther.

Cov pib tshiab niaj hnub yws txog Go nyob rau hauv cov nqe lus ntawm qhov tsis muaj generics. Yuav kom daws tau qhov teeb meem no, feem ntau ntawm lawv siv cov ntawv luam ncaj qha. Piv txwv li, ib qho kev ua haujlwm rau kev sau cov npe ntawm cov lej, xws li cov kws tshaj lij ntseeg tias kev ua haujlwm tsis tuaj yeem siv rau lwm txoj hauv kev uas tsis yog los ntawm kev luam tawm yooj yim rau txhua hom ntaub ntawv.

package main

import "fmt"

func int64Sum(list []int64) (uint64) {
    var result int64 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func int32Sum(list []int32) (uint64) {
    var result int32 = 0
    for x := 0; x < len(list); x++ {
        result += list[x]
    }
    return uint64(result)
}

func main() {

    list32 := []int32{1, 2, 3, 4, 5}
    list64 := []int64{1, 2, 3, 4, 5}

    fmt.Println(int32Sum(list32))
    fmt.Println(int64Sum(list64))
}

Cov lus muaj peev xwm ua tau raws li kev tsim kho. Piv txwv li, generic programming yuav zoo.

package main

import "fmt"

func Eval32(list []int32, fn func(a, b int32)int32) int32 {
    var res int32
    for _, val := range list {
        res = fn(res, val)
    }
    return res
}

func int32Add(a, b int32) int32 {
    return a + b
}

func int32Sub(a, b int32) int32 {
    return a + b
}

func Eval64(list []int64, fn func(a, b int64)int64) int64 {
    var res int64
    for _, val := range list {
        res = fn(res, val)
    }
    return res
}

func int64Add(a, b int64) int64 {
    return a + b
}

func int64Sub(a, b int64) int64 {
    return a - b
}

func main() {

    list32 := []int32{1, 2, 3, 4, 5}
    list64 := []int64{1, 2, 3, 4, 5}

    fmt.Println(Eval32(list32, int32Add))
    fmt.Println(Eval64(list64, int64Add))
    fmt.Println(Eval64(list64, int64Sub))
}

Thiab, txawm hais tias peb cov cai tau hloov mus ntev dua li cov ntaub ntawv dhau los, nws tau dhau los ua dav dav. Yog li ntawd, nws yuav tsis yooj yim rau peb siv tag nrho cov lej lej.

Ntau tus yuav hais tias qhov program hauv D zoo li luv luv, thiab lawv yuav yog.

import std.stdio;
import std.algorithm;

void main(string[] args)
{
    [1, 2, 3, 4, 5].reduce!((a, b) => a + b).writeln;
}

Txawm li cas los xij, nws tsuas yog luv dua, tab sis tsis yog ntau dua, txij li qhov kev siv D tsis quav ntsej txog qhov teeb meem ntawm kev ua yuam kev.

Nyob rau hauv lub neej tiag tiag, raws li qhov complexity ntawm logic nce, qhov sib txawv nqaim sai heev. Qhov sib txawv yuav kaw sai dua thaum koj yuav tsum ua qhov kev txiav txim uas tsis tuaj yeem ua tau siv tus qauv lus tus tswv.

Hais txog kev ruaj ntseg, kev nthuav dav, thiab kev nyeem tau, hauv kuv lub tswv yim, Go lus yeej yeej, txawm hais tias nws poob hauv kev hais lus.

Kev ua haujlwm dav dav hauv qee kis muab cov txiaj ntsig tsis tuaj yeem lees paub. Qhov no yog qhia meej meej los ntawm cov pob khoom. Yog li, txhawm rau txheeb xyuas ib daim ntawv teev npe, peb tsuas yog yuav tsum tau siv qhov sort.Interface interface.

import "sort"

type Names []string

func (ns Names) Len() int {
    return len(ns)
}

func (ns Names) Less(i, j int) bool {
    return ns[i] < ns[j]
}

func (ns Names) Swap(i, j int) {
    ns[i], ns[j] = ns[j], ns[i]
}

func main() {
    names := Names{"London", "Berlin", "Rim"}
    sort.Sort(names)
}

Yog tias koj siv qhov project qhib thiab khiav grep "interface{}" -R hais kom ua, koj yuav pom tias siv cov kev cuam tshuam cuam tshuam ntau npaum li cas. Cov phooj ywg ze-minded yuav tam sim ntawd hais tias tag nrho cov no yog vim tsis muaj generics. Txawm li cas los xij, qhov no tsis yog ib txwm muaj. Cia peb coj DELPHI ua piv txwv. Txawm tias muaj cov tib generics, nws muaj ib tug tshwj xeeb VARIANT hom rau kev khiav hauj lwm nrog arbitrary cov ntaub ntawv hom. Cov lus Go ua tib yam.

Los ntawm ib tug cannon mus rau sparrows

Thiab lub straitjacket yuav tsum haum qhov loj ntawm qhov kev npau taws. Stanislav Lec.

Ntau tus kiv cua loj tuaj yeem thov tias Go muaj lwm txoj hauv kev los tsim cov generics - xav txog. Thiab lawv yuav yog ... tab sis tsuas yog nyob rau hauv tsawg zaus.

Rob Pike ceeb toom peb:

Qhov no yog ib qho cuab yeej muaj zog uas yuav tsum tau siv nrog ceev faj. Nws yuav tsum tau zam tshwj tsis yog tias tsim nyog nruj me ntsis.

Wikipedia qhia peb cov hauv qab no:

Reflection yog hais txog cov txheej txheem thaum lub sijhawm ua haujlwm tuaj yeem saib xyuas thiab hloov kho nws tus kheej cov qauv thiab tus cwj pwm thaum ua tiav. Lub programming paradigm hauv qab kev xav yog hu ua reflective programming. Qhov no yog ib hom metaprogramming.

Txawm li cas los xij, raws li koj paub, koj yuav tsum them txhua yam. Hauv qhov no nws yog:

  • nyuaj rau kev sau ntawv
  • program execution ceev

Yog li ntawd, kev xav yuav tsum tau siv nrog ceev faj, zoo li riam phom loj-caliber. Kev xav tsis zoo ntawm kev xav ua rau cov kev pab cuam nyeem tsis tau, tsis tu ncua thiab tsis nrawm. Tsuas yog qhov khoom rau tus programmer snob kom muaj peev xwm qhia tawm nws cov cai nyob rau hauv pem hauv ntej ntawm lwm tus, ntau pragmatic thiab cov npoj yaig.

Kab lis kev cai hnab los ntawm Xi? Tsis yog, los ntawm ntau hom lus!

Nrog rau cov hmoov zoo, cov nuj nqis tseem tshuav rau cov qub txeeg qub teg.

Txawm tias muaj coob tus ntseeg hais tias cov lus yog tag nrho raws li C cuab yeej cuab tam, qhov no tsis yog li ntawd. Cov lus suav nrog ntau yam ntawm cov lus programming zoo tshaj plaws.

syntax

Ua ntej ntawm tag nrho cov, lub syntax ntawm grammatical qauv yog raws li nyob rau hauv lub syntax ntawm cov lus C. Txawm li cas los xij, hom lus DELPHI kuj muaj kev cuam tshuam loj heev. Yog li, peb pom tias cov kab lus tsis txaus ntseeg, uas txo qis kev nyeem ntawv ntawm qhov program, tau raug tshem tawm tag nrho. Cov lus tseem muaj ": =" tus neeg teb xov tooj uas muaj nyob rau hauv DELPHI hom lus. Lub tswv yim ntawm pob khoom yog qiv los ntawm cov lus zoo li ADA. Kev tshaj tawm ntawm cov chaw tsis siv yog qiv los ntawm PROLOG hom lus.

Semantics

Cov pob khoom tau ua raws li cov ntsiab lus ntawm DELPHI hom lus. Txhua pob encapsulates cov ntaub ntawv thiab cov lej thiab muaj cov chaw ntiag tug thiab pej xeem. Qhov no tso cai rau koj los txo cov pob interface kom tsawg.

Kev ua haujlwm los ntawm tus txheej txheem delegation tau qiv los ntawm DELPHI hom lus.

Muab tso ua ke

Nws tsis yog tsis muaj laj thawj tias muaj lus tso dag: Mus tau tsim thaum C program tau muab tso ua ke. Ib qho ntawm qhov muaj zog ntawm cov lus yog nws qhov kev sau nrawm nrawm. Lub tswv yim tau qiv los ntawm DELPHI hom lus. Txhua pob Go sib raug rau DELPHI module. Cov pob ntawv no tau muab rov qab tsuas yog thaum tsim nyog tiag tiag. Yog li ntawd, tom qab kev hloov kho tom ntej, koj tsis tas yuav suav tag nrho cov kev pab cuam, tab sis tsuas yog rov ua dua cov pob khoom hloov pauv thiab cov pob khoom uas nyob ntawm cov pob hloov pauv no (thiab txawm tias tom qab ntawd, tsuas yog cov pob cuam tshuam tau hloov pauv).

Kev tsim kho siab

Cov lus muaj ntau yam sib txawv ntawm qib siab uas tsis muaj feem cuam tshuam rau cov lus qis xws li C.

  • Cov hlua
  • Hash rooj
  • Hniav
  • Duck typing yog qiv los ntawm cov lus xws li RUBY (uas, hmoov tsis, ntau tus tsis to taub lossis siv rau nws lub peev xwm tag nrho).

Kev tswj hwm nco

Kev tswj hwm kev nco feem ntau tsim nyog ib tsab xov xwm cais. Yog hais tias nyob rau hauv cov lus zoo li C ++, kev tswj tau tag nrho rau tus tsim tawm, tom qab ntawd hauv cov lus tom qab xws li DELPHI, siv cov qauv suav siv. Nrog rau txoj hauv kev no, tsis pub siv cov ntaub ntawv cyclic, txij li cov pawg me nyuam ntsuag raug tsim, ces Go tau tsim-hauv kev tshawb pom cov pawg (xws li C#). Tsis tas li ntawd, cov khoom siv khib nyiab muaj txiaj ntsig zoo dua li qhov tam sim no paub txog kev siv thiab tuaj yeem siv rau ntau lub sijhawm ua haujlwm. Cov lus nws tus kheej paub txog cov xwm txheej thaum tus nqi khaws cia qhov sib txawv tuaj yeem faib rau ntawm pawg. Qhov no txo ​​cov load ntawm tus thawj tswj nco thiab ua rau kom ceev ntawm qhov kev pab cuam.

Concurrency thiab Concurrency

Kev sib piv thiab kev sib tw ntawm cov lus yog dhau qhov kev qhuas. Tsis muaj hom lus qis dua tuaj yeem sib tw nrog Go. Yuav kom ncaj ncees, nws tsim nyog sau cia tias tus qauv tsis yog tsim los ntawm cov neeg sau lus, tab sis tsuas yog qiv los ntawm cov lus qub ADA zoo. Cov lus muaj peev xwm ua tiav ntau lab ntawm kev sib txuas ua ke siv tag nrho CPUs, thaum muaj qhov kev txiav txim ntawm qhov loj me tsis tshua muaj teeb meem nrog kev tuag thiab haiv neeg cov xwm txheej uas raug rau ntau txoj xov tooj.

Cov txiaj ntsig ntxiv

Yog tias nws muaj txiaj ntsig, txhua tus yuav dhau los ua tus kheej.

Cov lus kuj tseem muab rau peb nrog ntau cov txiaj ntsig uas tsis xav tau:

  • Ib cov ntaub ntawv executable ib zaug tom qab tsim qhov project zoo heev yooj yim rau kev xa tawm cov ntawv thov.
  • Kev ntaus ntawv zoo li qub thiab hom kev xav tuaj yeem txo cov lej yuam kev hauv koj cov lej, txawm tias tsis muaj kev xeem sau ntawv. Kuv paub qee tus programmers uas tsis tau sau ntawv xeem txhua qhov thiab qhov zoo ntawm lawv cov lej tsis raug kev txom nyem loj heev.
  • Yooj yim heev cross-compilation thiab zoo heev portability ntawm tus qauv tsev qiv ntawv, uas zoo heev simplifies txoj kev loj hlob ntawm cross-platform daim ntaub ntawv.
  • RE2 cov lus qhia tsis tu ncua yog xov-zoo thiab muaj lub sijhawm ua tiav.
  • Lub tsev qiv ntawv tus qauv muaj zog uas tso cai rau feem ntau cov haujlwm ua yam tsis muaj cov txheej txheem thib peb.
  • Cov lus muaj zog txaus los tsom rau qhov teeb meem ntau dua li yuav daws tau li cas, tab sis qis qis txaus kom qhov teeb meem daws tau zoo.
  • Lub Go eco system twb muaj cov cuab yeej tsim tawm hauv lub thawv rau txhua lub sijhawm: kev sim, cov ntaub ntawv, kev tswj cov pob, cov ntaub ntawv muaj zog, cov cim cim, cov neeg kuaj mob, thiab lwm yam.
  • Mus version 1.11 tau qhia txog kev tswj hwm semantic kev vam khom, ua rau saum VCS nrov hosting. Txhua yam cuab yeej uas tsim los ntawm Go ecosystem siv cov kev pabcuam no los rub tawm, tsim, thiab nruab cov lej los ntawm lawv hauv ib qho poob. Thiab qhov ntawd zoo heev. Nrog rau qhov tuaj txog ntawm version 1.11, qhov teeb meem nrog pob versioning kuj tau daws tag nrho.
  • Vim hais tias lub tswv yim tseem ceeb ntawm cov lus yog los txo cov khawv koob, cov lus incentivizes developers ua yuam kev tuav meej meej. Thiab qhov no yog qhov tseeb, vim tias tsis yog, nws yuav tsuas hnov ​​​​qab txog kev ua yuam kev tag nrho. Lwm qhov yog tias cov neeg tsim khoom feem ntau txhob txwm tsis quav ntsej txog kev ua yuam kev, nyiam dua tsis ua rau lawv yooj yim xa qhov yuam kev nce mus.
  • Cov lus tsis siv cov txheej txheem OOP classical, vim nyob rau hauv nws daim ntawv ntshiab tsis muaj virtuality hauv Go. Txawm li cas los xij, qhov no tsis yog teeb meem thaum siv interfaces. Qhov tsis muaj OOP txo qhov cuam tshuam rau kev nkag rau cov pib tshiab.

Simplicity rau zej zog kev pab

Nws yog ib qho yooj yim kom nyuaj, nyuaj rau simplify.

Go tau tsim los ua kom yooj yim thiab nws ua tiav ntawm lub hom phiaj ntawd. Nws tau sau rau cov neeg txawj ntse programmers uas nkag siab txog cov txiaj ntsig ntawm kev ua haujlwm pab pawg thiab nkees ntawm kev hloov pauv tsis kawg ntawm Enterprise-theem hom lus. Muaj cov txheej txheem me me ntawm syntactic cov qauv hauv nws cov arsenal, nws yog qhov ua tau zoo tsis muaj kev hloov pauv raws sijhawm, yog li cov neeg tsim khoom muaj sijhawm ntau tso tawm rau txoj kev loj hlob, thiab tsis yog rau kev kawm lus tshiab tsis tu ncua.

Cov tuam txhab lag luam kuj tau txais ntau qhov zoo: qhov kev nkag qis qis tso cai rau lawv nrhiav tau tus kws tshaj lij sai sai, thiab kev hloov tsis tau ntawm cov lus tso cai rau lawv siv tib txoj cai txawm tias tom qab 10 xyoo.

xaus

Lub hlwb loj loj yeej tsis tau ua ib tus ntxhw ua tus yeej Nobel nqi zog.

Rau cov programmers uas nws tus kheej ego ua qhov tseem ceeb tshaj ntawm pab pawg neeg lub siab, nrog rau cov theorists uas nyiam cov kev sib tw kev kawm thiab tsis muaj qhov kawg "kev txhim kho tus kheej", cov lus phem heev, vim nws yog hom lus dav dav uas tsis tso cai rau koj tau txais. Kev zoo nkauj zoo nkauj los ntawm qhov tshwm sim ntawm koj txoj haujlwm thiab qhia koj tus kheej ua haujlwm nyob rau hauv pem hauv ntej ntawm cov npoj yaig (muab tias peb ntsuas kev txawj ntse los ntawm cov qauv no, thiab tsis yog los ntawm IQ). Zoo li txhua yam hauv lub neej, nws yog qhov tseem ceeb ntawm tus kheej. Zoo li txhua qhov kev tsim kho tshiab tsim nyog, cov lus tau dhau los ntev los ntawm kev tsis lees paub thoob ntiaj teb mus rau kev lees txais loj. Cov lus yog ingenious nyob rau hauv nws simplicity, thiab, raws li koj paub, txhua yam ingenious yog yooj yim!

Tau qhov twg los: www.hab.com

Ntxiv ib saib