Skip to content

Latest commit

 

History

History
296 lines (150 loc) · 60.9 KB

Teach_yourself_cs-2020-KG.md

File metadata and controls

296 lines (150 loc) · 60.9 KB

Компьютер илимин өз алдынча кантип үйрөнсө болот?

Бул колдонмону англис тилинен Тавита Менаше которгон. Бул колдонмо башында Oz Nova жана Myles Byrne тарабынан жазылган жана https://teachyourselfcs.com/ сайтында жеткиликтүү. Эгер англис тилин билбесениз, орус тилиндеги альтернативаларды тапсаңыз болот.

Эгер сиз өзүңүз код жазганды үйрөнгөн болсоңуз же жакында эле курс бүтүргөн болсоңуз, кийинки кадамыңыз бул кесипке тереңдеп кирип, компьютер илимин же Computer Science (CS) илимин изилдөө. Убакыт жана акча коротпой эң мыкты университеттердин деңгээлинде компьютер илими боюнча билим ала турганыңыз кандай сонун болот!

Бизде укмуштуудай көлөмдөгү ар кандай ресурстар бар, бирок айрымдары башкаларга караганда жакшыраак. Сизге дагы бир "200+ бекер онлайн курстар" тизмеси керек эмес. Сизге болгону эки суроого жооп керек:

  • Кайсы дисциплиналарды окушум керек жана эмне үчүн?
  • Бул дисциплиналарды үйрөнүү үчүн эң жакшы китеп же видеолекция курсу кайсы?

Бул колдонмо сизге ушул суроолорго жооп табууга жардам берет.

Кыскасы:

Бул тогуз теманы болжол менен тизмеленген тартипте изилдеңиз. Сунушталган китепти же видеолекциялардын курсун же экөөнү тең колдонуңуз. Алардын ар бирин үйрөнүүгө 100-200 саат бөлүп, карьераңыз өскөн сайын керектүү ресурстарга (темаларга) кайтыңыз 🚀.

Предмет Эмне үчүн окуш керек? Мыкты китеп Мыкты видеолор
Программалоо Рекурсия эмне экенин "түшүнбөгөн" адам болбош үчүн .. Компьютердик программалардын структурасы жана интерпретациясы Brian Harvey’s Berkeley CS 61A
Компьютердин архитектурасы Компьютердин кантип иштээрин билбесеңиз, код менен эмнелерди кыла аларыңызды жана эмнелерди кыла албасыңызды түшүнүксүз болуп калат. Компьютердин архитектурасы жана компьютер системасынын проекталоо Berkeley CS 61C
Алгоритмдер жана маалымат структуралары Эгерде сиз стектер, кезектер, дарактар, графиктер сыяктуу негизги маалымат структураларын кантип колдонууну билбесеңиз, татаал маселелерди чече албайсыз. Алгоритмдер. Өнүгүү (разработка боюнча) колдонмосу Steven Skiena’s lectures
CS үчүн математика CS, чындыгында, прикладдык математиканын тармактарынын бири болуп саналат. Демек, математиканы билүү сизге олуттуу артыкчылык берет. Mathematics for Computer Science Tom Leighton’s MIT 6.042J
Операциондук системалар Сиз жазган коддун көбү ОС тарабынан аткарылат. Ошондуктан, сиз ОС менен коддун бирге аракеттешүүнүн билишиңиз керек. Operating Systems: Three Easy Pieces Berkeley CS 162
Компьютердик тармактар Интернет бардык жерде: анын потенциалын 100% колдонуу үчүн анын кантип иштээрин билип алыңыз. Computer Networking: A Top-Down Approach Stanford CS 144
Маалыматтар базасы Берилиштер (маалыматтар) көпчүлүк программалык камсыздоонун негизи болуп саналат, бирок айрымдары гана маалымат базасы системаларынын чындыгында кантип иштээрин түшүнүшөт. Readings in Database Systems Joe Hellerstein’s Berkeley CS 186
Тилдер жана компиляторлор Эгерде сиз тилдер жана компиляторлор кантип иштээрин түшүнсөңүз, кодду жакшыраак жазып, жаңы тилдерди натыйжалуураак үйрөнө аласыз. Компиляторлор: принциптер, технологиялар жана аспаптар Alex Aiken’s course on Lagunita
Бөлүштүрүлгөн системалар Көпчүлүк системалар бүгүнкү күндө бөлүштүрүлгөн системалар. Бөлүштүрүлгөн системалар. Принциптер жана парадигмалар MIT 6.824

Абдан көп маалымат деп ойлоп жатасызбы?

Эгерде бул тогуз теманы өз алдынча бир нече жыл бою изилдөө идеясы анча деле жагымдуу көрүнбөсө, анда биз эки китепке көңүл бурууну сунуштайбыз: Computer Systems: A Programmer's Perspective жана Designing Data-Intensive Applications. Биздин тажрыйбабыз боюнча, бул эки китеп, өзгөчө веб-тиркемелер менен иштеген жана программалоону өз алдынча же bootcampте үйрөнгөндөр үчүн идеалдуу инвестиция. Алар ошондой эле жогоруда саналып өткөн башка темаларды жана ресурстарды жакшыраак түшүнүү үчүн баштапкы чекит катары кызмат кыла алат.

Эмне үчүн компьютер илимин (Computer Science) изилдөө керек?

Күн сайын дүйнө жүзү боюнча 20 миллиардга жакын SMS жөнөтүлөт. WhatsApp болсо күнүмдүк 42 миллиард жумуш жүктөмүнө туш болуп, штатында 57 программист иштейт. pic.twitter.com/zZrtSIzhlR

— Бенедикт Эванс (@BenedictEvans) 2 февраль 2016 жыл

Программисттер эки түргө бөлүнөт: предметтик аймактык бардык татаал жактарын түшүнгөн жана татаал инновациялык иштерди жасай алгандар жана бир нече жогорку деңгээлдеги алкактарды (фреймворкторду) жакшы билген жана андан башка атайын билимди талап кылбаган иштерди жасагандар.

Алардын баары өздөрүн программист деп аташат жана баштапкы этапта болжол менен бирдей эмгек акы алышат. Бирок, убакыттын өтүшү менен, биринчи түрү бир кыйла татаал, толук кандуу жана жогорку акы төлөнүүчү ишке карай илгерилейт. Мисалы, алар менеджментке киришет жана компаниянын ичинде чоң таасирге ээ болушат, ачык булактуу долбоорлорду ишке ашырышат, команда лидери болушат же сонун код жазышат.

Биринчи типтеги программисттер информатика тармагында терең билимге ээ - алар университетте окуп жүргөндө алганбы, же тынымсыз өз алдынча билим алганбы, уйкусуз түндөрдү китеп окуу менен өткөрүшкөн. Экинчи типтеги программист, адатта, үстүртөн билимге ээ, алар негизделген теорияны эмес, конкреттүү инструменттерди жана технологияларды изилдейт. Тигил же бул технология күтүлбөгөн жерден суроо-талапка жана популярдуулукка ээ болгондо, алар барган сайын жаңы көндүмдөрдү өнүктүрүшөт.

Азыркы учурда IT тармагына көп адамдар кирип жатышат, ал эми компьютер илими (Computer Science) факультетин бүтүргөндөрдүн саны мурдагыдай эле калууда. Ошентип, бул индустрияда экинчи типтеги адамдар көбөйүп жатат, бул аларга жакшы кызыктуу жумушка ээ болуу убакыт өткөн сайын кыйын болуп баратат. Акыры өзүңүздү биринчи типке классификациялоо үчүн билимиңизди өркүндөтүнүз жана жумуш берүүчүлөр үчүн сурам талаптуу болуп, өзүңүздү ишенимдүү сезгиңиз келсе, компьютер илими сизге керек.

Тема боюнча нускамалар

Программалоо

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

Мындай материалды үйрөнүү үчүн, адатта, Компьютердик программалардын структурасы жана интерпретациясы (Structure and Interpretation of Computer Programs) классикалык китеби жана MITден ушул эле аталыштагы лекциялардын курсу сунушталат. Китеп жана MIT лекция курсу экөө тең онлайн режиминде акысыз (англис тилинде) жеткиликтүү. Бизге бул лекциялар абдан жагат, бирок биз анын ордуна Брайан Харви лекция курсун окууну сунуштайбыз, Беркли курсунун 61А жазуусу. Бизге алардагы маалымат майда-чүйдөсүнө чейин талдангандай сезилет жана жаңы баштагандарга ошону үйрөнүү оңой болот.

Компьютердик программалардын структурасы жана интерпретациясы китебинин жок дегенде биринчи үч бөлүмүн окуп чыгууну жана алар үчүн көнүгүүлөрдү аткарууну сунуштайбыз. Мындан тышкары, сиз exercism боюнча маселелерди (задачки) чечсеңиз болот.

Бул колдонмо биринчи жолу 2016-жылы жарык көргөндүктөн, бизден Джон Денеронун 61A курсунун жаңыраак версиясын жана ага ылайыктуу Жазуучу программалар китебин сунуштайсызбы деп сурашат, ал ресурстарда Python программалоо тили негизги тил болуп саналат. Денеро курсу да абдан жакшы, кээ бир студенттерге көбүрөөк жагат деп ойлойбуз. Бирок биз дагы эле The Structure and Interpretation of Computer Programs китебинен жана Брайан Харвинин курсунан баштоону сунуштайбыз. Биз бул ресурстар уникалдуу жана алар сиздин компьютерлер жана программалоо жөнүндө ой жүгүртүүңүздү түп тамырынан бери өзгөртө алат деп ишенебиз. Албетте, алар баарына жага бербейт. Кээ бирөөлөр китепти жактырбайт, көбү биринчи барактарынан ашпайт. Бирок бул китептин потенциалы чоң жана окуп көрүш керек.

Эгер сизге дагы эле Компьютердик программалардын структурасы жана интерпретациясы (Structure and Interpretation of Computer Programs) жакпаса, Composing Programs аракетин көрүңүз. Эгер бул сизге керек эмес деп ойлосоңуз, How to Design Programs аракет кылып көрүңүз. Эгер алардын баары өтө татаал болуп көрүнсө, аларды бир азга четтетип, башка темаларга өтүүгө аракет кылыңыз жана бир-эки жылдан кийин аларга кайтып келиңиз.

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

Орус тилиндеги альтернативалар: SICPтин орусча котормосу, Stepik'тен Python программалоо.

Компьютер архитектурасы

"Темир" платформа болуп саналат.

— Майк Актон, Engine Director в Insomniac Games (анын CppConдо сүйлөгөн сөзүн көрүңүз)

Компьютердин архитектурасы (компьютер системалары, компьютерди уюштуруу) абдан маанилүү тема. Архитектураны билүү терең изилдөөгө жана программалык камсыздоонун артында эмне турганын билүүгө мүмкүндүк берет. Биз CS боюнча расмий билими жок көптөгөн программисттер бул темадан качышканын байкадык.

Жаңы баштагандарга сунуштай турган ресурс бул Компьютердик системалар: Архитектура жана программалоо. Компьютердик системалар: Программисттин көз карашы (Computer Systems: A Programmer's Perspective) жана 1-6 бөлүмдөрдүн көбүн камтыган бул китепке негизделген компьютер архитектурасы курсу.

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

Материалды жайыраак темп менен үйрөнүүнү каалагандар жана аппараттык жана программалык камсыздоого бирдей кызыккандар үчүн Эсептөө системаларынын элементтери (The Elements of Computing Systems) китебин сунуштайбыз. Ал ошондой эле "Nand2Tetris" катары белгилүү. Бул китепте компьютердин иштеши боюнча толук маалымат камтылган. Ар бир бөлүм чоң системанын бөлүктөрүнүн бирин долбоорлоого багытталган - HDLде эң жөнөкөй логиканы жазуудан баштап CPU жана ассемблер менен иштөөгө чейин Tetris ойноо.

Китептин алгачкы алты бөлүмүн окуп чыгып, долбоорду иштетип, аягына чыгарууну сунуштайбыз. Бул сизге аппараттык жана программалык камсыздоонун (программное обеспечение - ПО) өз ара аракеттенишүүсүн, компьютердин архитектурасы программалык камсыздоого кандай таасир тийгизерин түшүнүүгө жардам берет.

Китептин биринчи жарымы жана бардык долбоорлор Nand2Tetris дарегинде бекер. Coursera боюнча бул китеп үчүн курс да бар.

Китеп түшүнүүгө оңой жана аппараттык жана программалык камсыздоону камтыйт. Бул аны окугандан кийин толуктук сезимин берет. Тилекке каршы, китеп өтө маанилүү бир нече түшүнүктөрдү камтыбайт - эс иерархиясы (иерархия памяти) жана эсептөө конвейери (конвейеризация вычислений).

Эгер сиз Nand2Tetris'ти жакшы түшүнгөн болсоңуз, Компьютердик системалар: Архитектура жана программалоо бөлүмүнө кайтууну сунуштайбыз. Программисттин көз карашы же Патерсон менен Хеннессинин классикалык Компьютер архитектурасы жана компьютердик системанын дизайны китебин окуп көрүңүз (Computer Organization and Design). Бул китептин кээ бир бөлүмдөрүн өткөрүп жиберсе болот, ал өтө майда-чүйдөсүнө чейин; конкреттүү темалар үчүн Берклидин CS61C course аткарууну сунуштайбыз. Лекциялардын конспекттери жана лабораториялары онлайн, ал эми лекциялардын эски версияларын архив дарегинен тапса болот.

Орус тилиндеги альтернативалар: CS-APPтин орусча котормосу, Санариптик схема жана компьютер архитектурасы.

Алгоритмдер жана маалымат структуралары

Мен сунуш кылган жалгыз ыкма - жазуудан мурун ойлонуу.

— Ричард Хамминг

Алгоритмдерди жана маалымат структураларын билүү компьютер илими боюнча ийгилигинин ачкычы болуп саналат деген пикир бар. Бул ошондой эле башка тармактарды үйрөнүүдө көп жардам берген инструмент. Көйгөйлөрдү чечүү чеберчиликти өнүктүрөт.

Алгоритмдер боюнча жүздөгөн китептер бар. Биздин сүйүктүү Алгоритмдер. The Algorithm Design Manual, Стивен Скиен (The Algorithm Design Manual. Татаал маселелерди чечүү - анын кумарлыгы, ошондуктан ал өзүнүн окуучуларын жана окурмандарын кызыктырганга жетишет. Биз Кормандын Algorithms. Куруу жана анализ жана Седгвиктин Algorithms. The Algorithm Design Manual өтө көп далилдер жана өтө теориялык, ошондуктан максатын койгондор үчүн анча ылайыктуу эмес деп ойлойбуз. алгоритмдерди жана маалымат структураларын практикада колдонууну үйрөнүү болуп саналат.

Видеолекцияларды жактыргандар үчүн Стивен Скиенанын YouTube сайтында жайгаштырылган лекция курсу да бар. Биз ошондой эле Coursera жана бул жерде бар Тим Roughgarden курсун жакшы көрөбүз. Ошентип, көптөгөн материалдар бар, сиз жөн гана сизге ылайыктуу нерсени тандап алышыңыз керек. Чынында, азыр биз бул жерде санабаган көптөгөн ресурстар бар. Эгер сиз арзырлык нерсе тапсаңыз, ошону тандоого сунуштайбыз, бул жеке каалооңузга байланыштуу!

Машыгуу үчүн Leetcode сайтында алгоритмдик маселелерди (задачки) чечүүнү сунуштайбыз. Мүмкүн болгон чечимдердин мисалдары менен майда-чүйдөсүнө чейин маселелер (задачки) ​​жана кайсынысы жакшыраак деген талкуулар кездешет. Leetcode боюнча көйгөйлөрдү чечүү Google, Meta, Amazon сыяктуу ири компаниялар менен интервьюга даярданууга да көп жардам берет, анткени алар ушул сыяктуу суроону абдан жакшы көрүшөт. Алгоритмдерди жана маалымат структураларын эффективдүү колдонууну үйрөнүү үчүн 100гө жакын кокус маселелерди чечүүнү сунуштайбыз.

Акырында биз How to Solve It сунуштайбыз; бул CS жана математиканы практикалоого ылайыктуу сонун китеп.

Орус тилиндеги альтернативалар: Скиенанын орусча котормосу, Алгоритмы, Разработка и Применение, Алгоритмы: теория и практика.

CS үчүн математика

Адамдар математиканын канчалык жөнөкөй экенин түшүнүшпөйт, анткени алар жашоонун канчалык татаал экенин түшүнүшпөйт.

— Джон фон Нейман

Башкача айтканда, компьютер илими прикладдык математиканын бир бутагы. Көптөгөн программисттер аны көрмөксөнгө салууга аракет кылышат, бирок биз аны программабызга киргизүүнү талап кылабыз. Бул кылбагандарга шексиз артыкчылык берет.

Компьютер илими үчүн математиканын эң актуалдуу чөйрөсү дискреттик математика болуп саналат. "Дискреттүү" - "үзгүлтүксүз" сөзүнүн антоними, ал эми дискреттик математика, чындыгында, эсептөө деп аталган дисциплинага кирбеген кызыктуу прикладдык темалардын жыйындысы. Бул темалардын бардык спектрин камтууга аракет кылуунун кереги жок - бул дисциплинада өтө көп бөлүмчөлөр бар. Бир реалдуу максат – логиканы, комбинаториканы жана ыктымалдуулукту өркүндөтүү, көптүктөр теориясын, графиктер теориясын жана криптографияда кеңири колдонулган сандар теориясын бир аз үйрөнүү. Математиканын дагы бир чөйрөсү сызыктуу алгебра болуп саналат. Бул компьютердик графика жана машина үйрөнүү ыкмалары менен иштөө үчүн абдан маанилүү.

Дискреттик математиканы изилдөөнү Ласло Ловастын лекциялары менен баштоону сунуштайбыз. Профессор Ловастын лекциялары түшүнүктүү жана интуитивдик болгондуктан, бул тармак менен таанышууга абдан ылайыктуу.

Прогрессивдүү окуучуларга Математика информатика үчүн китебин сунуштайбыз (Mathematics for Computer Science) - лекция конспектилери өзүнчө китепте чогултулган ошол эле аталыштагы MIT курсу. Видеолекциялар курстары да бекер, биз аларды дискреттик математиканы үйрөнүү үчүн сунуштайбыз.

Изучение линейной алгебры мы советуем начать с серии видео Essence of linear algebra, затем перейти к книге Гилберта Стрэнга и видеолекциям от MIT.

Сызыктуу алгебраны (линейная алгебра) изилдөөнү видео сериясынан баштоону сунуштайбыз Essence of linear algebra, андан кийин Гилберт Стрэнгдин китебине өтүңүз жана MITтен видеолекциялар.

Орус тилиндеги альтернативалар: Дискретный анализ. Учебное пособие, Ликбез по дискретной математике.

Операциондук системалар

Операциялык системалар боюнча эки классикалык китеп - Operating System Concepts жана Заманбап Операциялык Системалар Таненбаумдун (Modern Operating Systems). Бул эки китеп тең чаташкан жана өтө татаал жана жөнөкөй студент үчүн анча ылайыктуу эмес деп сынга алынган.

Жакшы альтернатива болуп англис тилиндеги акысыз болгон Operating Systems: Three Easy Pieces болуп саналат. Бизге китептин түзүлүшү жана окууга жеңилдиги өзгөчө жагат. Бул китептеги көнүгүүлөр убакытты талап кылат.

Бул китептен кийин биз сизге "{OS аталышы} архитектурасы" сыяктуу окуу китептерин колдонуп, айрым операциялык системалардын структурасын изилдөөнү сунуштайбыз. Мисалы, Lion's commentary on Unix, The Design and Implementation of the FreeBSD Operating System, Mac OS X Internals. Linux`ту үйрөнүү үчүн Роберт Лавдын Linux Kernel Development сонун китебине көңүл бурууну сунуштайбыз.

Алынган билимдерди эстөө үчүн эң сонун жолу - бул кичинекей ядронун кодун окуп, ал жерге өзүңүздүн мүмкүнчүлүктөрүңүздү кошуу. Мисалы, сиз xv6 OS менен эксперимент жүргүзө аласыз, ANSI Cдеги Unix V6дан кийин моделделген жана x86да иштейт. Бул ОС MIT курстарынын бири үчүн колдоого алынат. Operating Systems: Three Easy Pieces xv6 үчүн лабораториялык долбоорлор менен тиркеме бар, ал жакта потенциалдуу долбоорлор үчүн көптөгөн пайдалуу идеяларды таба аласыз.

Орус тилиндеги альтернативалар: Курс «Операционные системы» (книга внутри).

Компьютердик тармактар

Биз келечекти кристалл шардан көрө албайбыз. Келечектин интернети коом жасаган нерсе болот.

— Боб Кан

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

Бул тема боюнча биздин сүйүктүү китебибиз Computer Networking: A Top-Down Approach. Китепте кээ бир жакшы долбоорлор жана көнүгүүлөр камтылган жана онлайнда жеткиликтүү болгон ушуларды биз өзгөчө сунуштайбыз.

Видеолекциялардан үйрөнүүнү каалагандар үчүн мурда расмий катары жеткиликтүү болгон Стэнфорд курсун Introduction to Computer Networking колдонуп көрүүнү сунуштайбыз. Stanford ачык курсу бар болчу, бирок азыр, тилекке каршы, аны YouTube'да расмий эмес плейлист катары гана табууга болот.

Орус тилиндеги альтернативалар: Компьютерные сети от тех же авторов.

Маалыматтар базасы

Маалымат базалары өз алдынча үйрөнө турган эң татаал жана көп убакытты талап кылган темалардын бири. Бул аймак салыштырмалуу жаңы - 1970-жылдардан кийин пайда болгон. Компаниялар үчүн маалыматтар базасы боюнча материалдардын эркин жеткиликтүү болушу пайдасыз болуп калды. Мындан тышкары, бул темада жакшы окуу китептерин жаза алган көптөгөн потенциалдуу авторлор ири компанияларда иштөөнү тандашкан, ал тургай өз компанияларын негиздешкен.

Ошол үчүн, биз бул аймакты өз алдынча изилдөөнү каалагандарга китептерин окубай, Джо Хеллерштейнден UC Berkeley CS 186 маалымат базалары боюнча курсунан баштоону кеңеш кылабыз.

Бул тармакка жаңы үйрөнүп жаткандар үчүн бул макаланы “Architecture of a Database System” белгилеп кетүү керек. Бул жакшы макала, анткени ал сизге реляциялык маалымат базасын башкаруу системалары кандайча иштээри жөнүндө жалпы түшүнүк берет. Бул андан ары билим алуу үчүн мыкты негиз болуп кызмат кылат.

Кызыл китеп деген ат менен белгилүү болгон Readings in Database Systems бул Питер Бейлис, Джо Хеллерштейн жана Майкл Стоунбрейкер тарабынан түзүлгөн жана редакцияланган макалалардын жыйнагы. CS 186 курсун жакшы окугандар үчүн кызыл китеп кийинки кадам болуп саналат.

Эгер сиз дагы эле ушул аймак менен таанышуу үчүн окуу куралын колдонгуңуз келсе, Database Management Systems карап чыгууну сунуштайбыз. Эгер сиз андан өйдө деңгээлге өткүнүңүз келсе, Джим Грейдин классикалык Transaction Processing: Concepts and Techniques китебин караңыз.

Ошондой эле маалыматтарды моделдөө – бул маалымат базалары менен иштөөнүн аспектиси, аны көп учурда изилдөөгө тийиштүү көңүл бурулбайт. Бул тема туралуу ушул китипти сунуштайбыз: Data and Reality: A Timeless Perspective on Perceiving and Managing Information in Our Imprecise World.

Орус тилиндеги альтернативалар: орус тилинде жакшы материалдар аз, бирок биз ушуну сунуштайбыз Погружение в СУБД и Введение в базы данных.

Тилдер жана компиляторлор

Шаблондуу программист болбоңуз. Колдонуучулар жана башка программисттер үчүн продукт жаратыңыз. Текстиль жана металл өнөр жайлары жөнүндө эстеп көрүңүз: сиз машиналарды курууну же иштетүүнү каалайсызбы?

— Раса Бодиктун компиляторлору боюнча курстун башталышы

Көпчүлүк программисттер программалоо тилдерин үйрөнүшөт, ал эми көпчүлүк компьютер илими менен алектенген адамдар тилдер кантип иштээрин жана алар эмнеге негизделгенин билишет. Бул аларга программалоодо да олуттуу артыкчылык берет! Алардын билими өткөрүлүп берилет; алар жаңы тилди жаңы эле үйрөнгөндөргө караганда тезирээк жана тереңирээк иштээрин түшүнө алышат.

Баштоо үчүн Crafting Interpreters Боб Нистромду окууну сунуштайбыз. Текст жакшы уюштурулган, окуу үчүн абдан кызыктуу жана тилдер кандай иштээрин жана алар колдонгон куралдарды жакшыраак түшүнүү максатын көздөгөн адамдар үчүн ылайыктуу. Биз сизге текстти толугу менен иштеп чыгууну жана ал жерде табылган маселелерди (задачки) ("challenges") чечүүгө аракет кылууну сунуштайбыз.

Жалпысынан компиляторлор жөнүндө билүү үчүн сунушталган китеп (Compilers: Principles, Techniques & Tools), ошондой эле "Ажыдаар менен китеп" деп аталат. Тилекке каршы, ал өз алдынча окуу үчүн абдан ылайыктуу эмес. Мугалимдер курстары үчүн бир нече семестрге темаларды тандап алганы жакшы.

Эгер сиз дагы эле "ажыдаар менен китепти" колдонууну чечсеңиз, андан белгилүү бир темаларды тандап алганыңыз жакшы. Насаатчыңыз же мугалимиңиз сизге бул жагынан жардам берсе жакшы болот. Биз бул китепти видеолекцияларга кошумча катары колдонууну сунуштайбыз. Мисалы, Алекса Айкена на edX лекциялары.

Орус тилиндеги альтернативалар: Драконы на русском:)

Бөлүштүрүлгөн системалар

Акыркы жылдары компьютерлердин саны абдан өстү. Мурда бизнестер күчтүү процессорлорду сатып алышса, азыр эң кичинекей тиркемелер да адатта бир нече машиналарда иштейт, башкача айтканда, бөлүштүрүлөт. Бөлүштүрүлгөн системалар - муну кантип уюштурууга болот деген илим.

Өз алдынча изилдөө үчүн биз Мартин Клеппмандын Designing Data-Intensive Applications китебин сунуштайбыз. Бул китеп бул багыттагы классикалык окуу китептеринен айырмаланат: окууга оңой жана үйрөнгөндөрүн иш жүзүндө колдонууну каалагандар үчүн арналган. Ошол эле учурда, китеп абдан терең фундаменталдык билимди берет.

Классиканы жактыргандар үчүн Таненбаумдун Распределенные системы. Принципы и парадигмы (Distributed Systems, 3rd Edition*). сунуштайбыз. Бул англис тилинде акысыз жана онлайн жеткиликтүү.

Видеолекцияларды жактыргандар үчүн эң сонун курс MIT курсу 6.824 Роберт Морис окутат. Кошумча материалдар бул жерден жеткиликтүү.

Окуу китебин же башка ресурстарды колдонуп жатасанызда, бөлүштүрүлгөн системалар жөнүндө макалаларды окуу зарыл. Жакшы тизмесин бул жерден тапса болот. Дагы бир сунушталган булак Papers We Love.

Орус тилиндеги альтернативалар: Высоконагруженные приложения перевод на русском, Распределенные системы.

Көп берилүүчү суроолор

Бул колдонмо кимдер үчүн?

Бул колдонмо сиз үчүн, эгерде сиз өз алдынча үйрөнгөн программист, курс \ bootcamp бүтүрүүчүсү же программалоону жакшы көргөн мектеп окуучусу болсоңуз. Ошондой эле, колдонмо программалоону окуган студенттер үчүн кошумча материал катары ылайыктуу. Кайсы этапта машыгууну баштоо жакшы - тандоо сиздики. Бирок биз теорияга кирүүдөн мурун программалоо тажрыйбасына ээ болуу жакшыраак деп ойлойбуз. Мисалы, биз студенттер маалымат базасынын теориясын үйрөнүүнү сүйөгөнүн байкадык, эгерде аларда буга чейин тажрыйба болгон болсо. Ал эми буга чейин веб-байланыштуу долбоордо иштеген студенттер компьютердик тармактарды үйрөнүүгө көбүрөөк түрткү алышат.

AI/графика/башка нерсе жөнүндө эмне айтууга болот?

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

  • Жасалма интеллектти изилдөө үчүн: Беркли университетинин видеолору жана долбоорлору (Pacman projects) AI боюнча киришүү курсу. Окуу китеби катары сиз Рассел менен Новигдин Жасалма интеллект: заманбап мамиле (Artificial Intelligence: A Modern Approach) китебин ала аласыз.
  • Машина үйрөнүү үчүн: Coursera боюнча Эндрю Нг курсу. Оор темаларга өтүүдөн мурун бардык негиздерди жакшы түшүнгөнүңүзгө ынаныңыз.
  • Компьютердик графика үчүн: CS 184 Беркли курсун өтүп, Computer Graphics: Principles and Practice китебин окуу куралы катары колдонуңуз.

Курстардын тартиби канчалык маанилүү?

Жалпысынан алганда, бул дисциплиналардын баары кандайдыр бир деңгээлде кесилишет жана бири-бирине шилтеме кылышат. Мисалы, дискреттик математиканы жана алгоритмдерди алалы: математиканы үйрөнүү алгоритмдерди талдап, жакшыраак түшүнүүгө жардам берет, ал эми алгоритмдерди үйрөнүү сизге математиканы түшүнүүгө түрткү берет. Идеалында, карьераңызда ар бир темага бир нече жолу кайтып келгениңиз жакшы.

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

Бул колдонмо Open Source Society программасынан жана freeCodeCamp программасынан эмнеси менен айырмаланат?

Бул колдонмо 2016-жылы түзүлгөн. Ошол убакта Open Source Society колдонмосу өтө көп предметтерди камтыган, изилдөө үчүн сунушталган ресурстардын айрымдары төмөн, андан тышкары, ал окуу үчүн сунушталган аспектилерди жана курстарды тандоону актаган жок. Биз колдонмодо адистигине карабастан, ар бир программистти чындыгында билиши керек болгон ресурстарды гана чогултууга аракет кылдык. Мындан тышкары, биз тандообузду актоого жана бул жерде саналган ресурстардын ар бири эмне үчүн керек экендигин түшүнүүгө аракет кылдык. Убакыттын өтүшү менен Open Source Society колдонмосу жакшыртылды, бирок биздин колдонмо түшүнүктүү жана ырааттуу программаны сунуштайт деп ишенебиз.

FreeCodeCampтин негизги багыты - компьютер илими эмес, программалоо. Өзгөчө компьютер илими эмне үчүн үйрөнүшүңүз керек экенин түшүндүрүүнү [жогоруда](#Эмне үчүн компьютер илимин (Computer Science) изилдөө керек?) тапса болот. Бирок, эгер сиз программалоодо жаңы болсоңуз, биз сизге адегенде freeCodeCamp аркылуу өтүп, бир же эки жылдан кийин биздин жол көрсөткүчүбүзгө кайтууну сунуштайбыз.

X тили жөнүндө эмне айтууга болот?

Конкреттүү бир программалоо тилин үйрөнүү менен компьютер илими тармагын үйрөнүү таптакыр башка нерселер. Тилди үйрөнүү бир топ жеңил, ал эми бул билим анча маанилүү эмес. Эгер сиз буга чейин бир нече тилди билсеңиз, анда биз сизге биздин жолду ээрчүүнү жана көрсөтүлгөн темалардын ортосунда же андан кийин жаңы тилдерди үйрөнүүнү сунуштайбыз. Эгерде сиз программалоону жакшы билсеңиз (мисалы, сиз компьютердик программалардын түзүмүн жана чечмелөөнү жакшы билсеңиз) жана, өзгөчө, эгерде сиз компиляторлорду изилдеген болсоңуз, анда жаңы тилдин негиздерин үйрөнүү бир нече күндөн ашпайт. Ал эми китепканаларды (библиотеки), тулдарды (tools), экосистеманы жолдо өздөштүрсө болот.

Баары айтып жаткан технология X жөнүндө эмне айтууга болот?

Азыркы технологиялардын бири да база катары изилдеш үчүн зарыл эмес. Башка жагынан алганда, сиз жаңы нерсени үйрөнүүгө түрткү алганыңыз абдан жакшы. Бирок айла - биринчи технологиянын артында турган түшүнүктөрдү жакшы түшүнүү. Бул сизге анын кантип иштээрин жакшыраак түшүнүүгө жардам берет.

Эмне үчүн сиз түшүнүү кыйын болгонуна карабастан Компьютердик программалардын структурасы жана интерпретациясы китебин сунуштайсыз?

Жөн гана окууга аракет кылыңыз. Көптөр бул китеп мээни эритет деп айтышат – мындай мүнөздөмөлөрдү сейрек угасыз. Эгер ал сиз үчүн иштебесе, ар дайым башка нерсени сынап көрүп, кийинчерээк ага кайтып келсеңиз болот.

Эмне үчүн "ажыдаар менен китепти" сунуштайсыз?

Бул китептин баары компиляторлор жөнүндө, бул китеп көпчүлүккө караганда бул тармакты жакшы камтыйт. Ал жаман репутацияга ээ, мунун баары биздин доордо анчалык деле актуалдуу болбогон кээ бир темаларга ашыкча басым жасалгандыгы менен байланыштуу. Мындай мисалдардын бири талдоо болуп саналат. Бирок бул китепти башынан аягына чейин окуу керек деп эч ким айткан эмес. Анын негизги максаты - мугалимге анын тегерегинде курс түзүү үчүн жетиштүү материал берүү. Ошентип, өз алдынча окугандар китептеги материалды тандап үйрөнө алышат. Андан да жакшысы - коомдук доменде болгон курстарды негиз катары алыңыз. Аларда буга чейин тажрыйбалуу мугалим тарабынан материал тандалып алынган.

Кантип көп акча коротпостон китептерди жана окуу китептерин алууга болот?

Биз сунуштаган китептердин көбү англис тилинде бекер онлайн. Ушунчалык кең пейилдүүлүк үчүн авторлорго рахмат! Эгер китеп бекер болбосо, колдонулган нускаларды сатып алууну сунуштайбыз. Адатта, китептер бир нече жолу басылып чыгат жана эски версиялары да жакшы. Жаңы версиянын мурункусунан 10 эсе жакшыраак болуу ыктымалдыгы, адатта, алда канча кымбат экенине карабастан, өтө аз.

Бул колдонмону ким түзгөн?

Бул колдонмонун биринчи версиясы Oz Nova жана Myles Byrne түзүшкөн, 2020-жылы аны Оз жаңырткан. Бул колдонмо Сан-Францискодогу жана онлайн режиминде чакан оффлайн топторунда 1000ден ашык bootcamp бүтүрүүчүлөрүнө жана формалдуу эмес программисттерге информатиканы үйрөтүү тажрыйбабызга негизделген. Бардык студенттерибизге пикири үчүн ыраазычылык билдиребиз.

Жетиштүү убакыт жана каалоо менен, сиз өз алдынча биз жазган нерселердин баарын изилдей алат деп ишенебиз. Бирок сиз мугалим жетектеген интенсивдүү, структураланган программаны кааласаңыз, биздин CS Intensive сизге ылайыктуу болушу мүмкүн. Биз сизге магистратурага барууну сунуштабайбыз.

Бул колдонмону, ошондой эле компьютердик технологиялар тармагындагы жаңылыктарды жана ресурстарды жаңыртып туруу үчүн teachyourselfcs дарегиндеги почта тизмебизге жазылыңыз.