Moj prvi, 100.000 (pregleda videa na Bilibili-ju)
Moj prvi, 100.000 (pregleda videa na Bilibili-ju)
Čestitke ovom UP kreatoru na Bilibili-ju — prošli video je probio 100.000 pregleda! Ovo je ujedno i prvi put u Ergeovom životu da je jednim jedinim videom probio 100.000 pregleda, pa se to mora obeležiti.

Iz brojnih dvorskih drama izvukao sam jedno dragoceno životno iskustvo: "majka postaje ugledna zahvaljujući sinu". To iskustvo važi i za Ergea lično — možda baš zbog ovog videa za ceo život najviše se hvali: evo, dobio je Bilibili-jevu treću nedeljnju nagradu "Kampus nagrada za izvrsnost i kampus zvezda u usponu".

Nisam mogao da suzdržim uzbuđenje, pa sam se tešio u Moments-u pred dvadeset hiljada ljudi. Sto hiljada pregleda — za velike UP kreatore to je možda stvar par minuta, ali za mene (budućeg) Bilibili top 100 kreatora, čekao sam čak 149 dana!!!!!!!!!
Ovo su zaista bili dugi dani, samo bog zna šta sam sve prošao tih dana.
Počeo sam da sumnjam da li uopšte odgovaram za snimanje videa — ukočena mimika, loš mandarinski, čak mi se i scenario, za koji sam uvek mislio da je moj ponos, činio bednim.
Ali baš zbog ovog videa ponovo sam se rodio, i uzbuđenje ne prestaje. Znam da prelazak jednog videa preko 100.000 pregleda ne znači da će i sledeći imati 100.000 pregleda, ali me bar može razveseliti — bar mogu "bezobrazno" još jednom da se pohvalim!
U jučerašnjem članku obećao sam da ću u novoj 2022. godini ponovo dati svu svoju krv, i ja uvek govorim ono što obećam: ovih dana na radnom mestu vlada ova kultura "šale", nije važno da li imaš sposobnosti, važno je da li si ono što ti je rukovodilac zadao i sproveo.
Erge će dati sve od sebe!
Novi video je već otpremljen na Bilibili, nadam se da ću uz sreću još jednom probiti. Link ostavljam ovde:
https://www.bilibili.com/video/BV1za411q79U/
Nije važno da li ćete pritisnuti trostruki prelaz (lajk, novac, favorite), ali važno je da bi nepritisak mogao da uvredi Ergeovu krv, pa ipak pritisnite trostruko, hahahaha, pogledajte ova naša prokleti biološki sat, ustali smo tako rano...

Zatim, pređimo na suštinske stvari. Ponovo sam uredio scenario ovog videa sa preko 100.000 pregleda. Prvobitno nisam hteo da ga objavim, ali su me mnogi u privatnim porukama pitali da li Erge više voli Bilibili i da mu se ne da ni da sinhronizuje?
Eto, brzo sam ga objavio i na zvaničnom nalogu, nadajući se da će ga studenti odmah sačuvati — ovaj zimski raspust će vam proći vrlo ispunjeno. Što se tiče onih koji rade, kao Erge — i radi i čita i piše i brine o porodici, zauzet je do smrti, pa zaboravite!

Ah, ne, ipak se malo mora napregnuti, da nas oni koji diplomiraju za pola godine ne bi pregazili na plaži...
Među Ergeovim čitaocima ima prilično studenata, pa kada sam na Zhihuu naišao na ovo pitanje:
"Nastavni plan i program na mom fakultetu je prilično čudan — u prvom semestru prve godine učimo C++, u drugom Python. Da li tokom zimskog raspusta treba da ponavljam ili unapred učim predmete (Python, C++), ili da se samostalno proširujem (C, strukture podataka)?"
Odmah sam se bacio da odgovorim.
Samo zbog te volje za učenjem, za tri godine ponude od internet kompanija će padati sa ruku!
Iskreno, nastavni plan na ovom studentovom fakultetu veoma je sličan mom — i ja sam u prvoj godini odmah počeo sa Javom, a susedno odeljenje je odmah krenulo sa C++, potpuno bez C-a za prelaz.
Zato je moj predlog: iskoristite zimski raspust da poigrate Honor of Kings i popnete se na rang listi!

Ah, ne! Iskoristite zimski raspust da prođete kroz open source kurs Univerziteta Tsinghua na GitHub-u sa preko 20.000 zvezdica!
Jedan, open source kurs Univerziteta Tsinghua na GitHub-u
Adresa: https://github.com/PKUanonym/REKCARC-TSC-UHT

Da provedem vas kroz nastavni plan Univerziteta Tsinghua, uglavnom za smer računarstva.
U prvom semestru prve godine osnovni računarski predmeti su: Uvod u računarske nauke, Osnove programiranja.
U drugom semestru prve godine: Osnove objektno orijentisanog programiranja.
U prvom semestru druge godine: Strukture podataka.
U drugom semestru druge godine: Uvod u veštačku inteligenciju, Osnove računarske grafike, Uvod u visoke performanse računarstva.
U prvom semestru treće godine: Principi organizacije računara, Principi računarskih mreža, Principi kompajliranja, Softversko inženjerstvo, Uvod u sisteme baza podataka, Veštačke neuronske mreže, Tehnike bezbednosti računarskih mreža, Teorija i tehnike interakcije čovek-računar.
U drugom semestru treće godine: Operativni sistemi, Arhitektura računarskih sistema, Uvod u mašinsko učenje, Rudarenje podataka, Osnove tehnologije pretraživača, Osnove tehnologija skladištenja, Specijalistička obuka o bazama podataka, Specijalistička obuka o računarskim mrežama.
Četvrta godina je uglavnom praksa, stažiranje, diplomski rad itd., a preostali računarski predmeti su uglavnom Inženjerstvo i praksa bezbednosti mreža i Ugrađeni sistemi.
Može se videti da su prva i druga godina uglavnom u stanju "mlitavosti", a treća godina iznenada kreće punom snagom sa raznim osnovnim računarskim predmetima — zaista ludo!
Međutim:
Ko ima volju, taj uspeva; ko preseče brodove i gaji ishranu srcem, stotinu dvadeset Qinovih prelaza pripada Čuu;
Nebo ne izneverava onog ko trpi; onaj koji spava na drvu i kuša žuč, tri hiljade vojnika Yuea može da proguta Wu!
Dva, učenje jezika C
Preporučujem jednu knjigu i dva video kursa.
Knjiga je elektronska, zove se "Ruan Yifeng: Uvodni kurs u C". Pročitao sam ga čim se pojavio i jako mi je koristio! Može se reći da je to trenutno najbolji uvodni tutorijal za C koji sam video, bez konkurencije! Na većini kineskih univerziteta se u prvoj godini predaje C, pa je ovaj "Uvodni kurs u C" profesora Ruan Yifenga zaista blagoslov.
Video kursevi su profesora Weng Kaija sa Univerziteta Zhejiang: jedan "Uvod u programiranje u C-u" i jedan "Napredno programiranje u C-u".
Nakon ovoga, moći ćete da naučite barem ono što je navedeno na sledećoj mentalnoj mapi.

Za više sadržaja o učenju C-a, kliknite na sledeći link — već sam ga objavio na zvaničnom nalogu, pa ga ovde neću prekopiravati:
Kako bi bruci trebalo da uči C, i šta da radi kada kod iz udžbenika ne razume?
Tri, učenje struktura podataka
Šta je struktura podataka?
Struktura podataka je skup elemenata podataka koji imaju određenu logičku relaciju, primenjuju neku strukturu skladištenja u računaru i obuhvataju odgovarajuće operacije. Sadrži tri aspekta: logičku relaciju, relaciju skladištenja i operacije. Različite vrste struktura podataka pogodne su za različite primene, a neke su čak namenjene specifičnim zadacima. Na primer, računarske mreže zavise od ruting tablica, a B-stablo je visoko pogodno za enkapsulaciju baza podataka.
Definicija struktura podataka na sajtu Runoob (sajt za početnike) mi se čini prilično formalna (zvanična). Da se izrazi ljudski: struktura podataka je način da se gomila podataka "umesi" u neki format.
Da li vam se sviđa Kung Pao piletina?
U svakom slučaju, meni se sviđa to jelo. Uzeću Kung Pao piletinu kao primer da vam objasnim strukture podataka. Na Wikipediji je definisana ovako.
Kung Pao piletina (engleski: Kung Pao chicken ili Kung-Pao Chicken), poznata i kao Gongbao piletina, jelo je u stilu sečuanske kuhinje, sa ukusom ljutog i slatkog ličija, koje potiče iz kuhinje provincije Guizhou, proširilo se u Shandong, a zatim formiralo u Sečuanu. U provincijama Guizhou, Shandong i Sečuan ovo jelo se priprema na različite načine i različito se naziva. U Guizhou se zove ljuta piletina u kockicama, u Shandongu džiangbao piletina u kockicama, a u Sečuanu nosi ime Kung Pao piletina.
Hajde da apstrahujemo Kung Pao piletinu.
struct KungPaoChicken {
piletina = []
kikiriki = []
luk = []
sečuanski papar = []
čili = []
}Ova struktura (struct je pojam u C-u) je prilagođena struktura podataka koja spaja mnogo različitih sastojaka. Za računarske strukture podataka, ti sastojci su samo zamenjeni osnovnim tipovima podataka.
Uzmimo Javu kao primer: osnovni tipovi podataka su int, char, double, a kompleksniji je String (referentni tip podataka), čija je osnova niz tipa char, dok su prilagođeni tipovi samo enkapsulacije osnovnih tipova podataka i referentnih tipova.
Nakon što smo apstrahovali Kung Pao piletinu, apstrahujmo i Ergea.
class Erge {
int age = 18;
double težina = 65kg;
void eat(KungPaoChicken) {
težina += 1kg;
}
}Pseudokod nije baš rigorozan, ali ćete razumeti poentu.
Na kraju krajeva, struktura podataka je samo apstraktna enkapsulacija. Jedan od važnih razloga zašto je Java popularan je taj što nudi raznolike i pogodne strukture podataka koje programeri pozivaju — na primer, ArrayList je enkapsulacija niza, LinkedList je enkapsulacija povezane liste, HashMap je enkapsulacija heš tabele, ConcurrentHashMap itd. C to nema; ako želite, morate sami da enkapsulirate. Ali osnovni tipovi podataka u Javi i C-u su isti — int, float i slično su kompatibilni.
Za početnike, u svakodnevnom pisanju koda se uglavnom direktno pozivaju strukture podataka, i retko se razmišlja o tome kako su te strukture implementirane.
Kada početnik krene da postaje napredni programer, mora da se smiri i shvati internu implementaciju ArrayList-a i LinkedList-a. Kada to shvati, postaće jasno zašto se u operacijama dodavanja, brisanja, izmene i pretrage razlikuju po performansama — upravo zato što interno koriste različite strukture podataka.
Iskreno, kada sam 2008. godine tek počeo da učim Javu, zaista nisam razumeo zašto je, ako već postoji ArrayList, Java dizajnirala i LinkedList — zar obe nisu kolekcije!
Ha!
Zašto su strukture podataka tako važne?
Igraću adut — navešću reči profesora Deng Junhuija sa Odeljenja za računarstvo Univerziteta Tsinghua.
Strukture podataka su ključni sadržaj računarskih nauka i neophodna osnova za izgradnju efikasnih algoritama. Znanja koja obuhvataju uvek zauzimaju centralno mesto u nastavnim planovima relevantnih smerova. Uzmimo kao primer ACM/IEEE Computing Curricula (nastavni plan računarstva) — među zajedničkim zahtevima za nekoliko relevantnih smerova (računarske nauke, računarsko inženjerstvo, informacioni sistemi, informaciona tehnologija, softversko inženjerstvo), strukture podataka i algoritmi, kao jezgro koncepata i veština programiranja, slede odmah nakon matematike, na drugom mestu.
Strukture podataka nisu ni previše kompleksne ni previše jednostavne, ali to nije važno — važno je da se moraju naučiti!
Neko možda pita: "Loše sam učio matematiku, da li ću moći da savladam strukture podataka?"
Iskreno rečeno, između struktura podataka i matematike nema nužne veze. U osnovnoj školi sam učestvovao na olimpijadi matematike grada Luoyang i osvojio treću nagradu (tajno podebljavam); u srednjoj školi mi je matematica uvek bila prilično dobra, ali u srednjoj školi sam, zbog previše igre, matematika drastično pala i postala mi najslabiji predmet. Na fakultetu su mi diskretna matematika i infinitezimalni račun pravili glavobolju.
Ali to me nije sprečilo da učim strukture podataka, zaista. U strukturama podataka, stabla su verovatno najteži deo, dok su nizovi, povezane liste, stekovi i heš tabele relativno jednostavni — student računarstva, uz malo truda, može sve to da savlada.
Posle toliko priče, kako zapravo učiti strukture podataka?
Ako imate osnove u C/C++, preporučujem dve knjige.
Prva, "Zabavno učenje struktura podataka".

Da budem precizniji. 2018. godine me je profesor Zhang iz izdavačke kuće Posts & Telecom Press pozvao da napišem knjigu o Javi. Hteo sam da je nazovem "Zabavno učenje Jave". Profesor Zhang je rekao da je ranije sa profesorkom Chen Xiaoyu sarađivao na knjizi "Zabavno učenje algoritama", pa će mi poslati jednu da pogledam.
Moram priznati da je ova knjiga prilično pogodna kao uvod u algoritme. Kasnije je profesorka Chen Xiaoyu objavila novu knjigu pod nazivom "Zabavno učenje struktura podataka". Pročitao sam je — iako se nešto udaljila od reči "zabavno", prilično je pogodna kao uvodna knjiga o strukturama podataka.
Druga, "Strukture podataka (C++ izdanje)".

Da, to je knjiga profesora Deng Junhuija sa Univerziteta Tsinghua, koja ima prilično visoku ocenu na Doubanu. Knjiga je praćena i video kursom koji je besplatan i može se gledati na platformi XuetangX, koji sam ranije preporučivao.

Kvalitet kursa je izvanredan — može se reći da je nacionalni vrhunski kurs. Ako imate vremena, obavezno ga pogledajte.
Adresa videa: https://www.xuetangx.com/course/THU08091000384/7755489
Usput, tu je i video kurs "bake" Chen Yue sa Univerziteta Zhejiang:
Adresa videa: https://www.bilibili.com/video/BV1JW411i731
Ako imate osnove u Javi, takođe preporučujem dve knjige.
Prva, "Analiza struktura podataka i algoritama (opisano kroz Javu)".

Iako prevod nije baš sjajan, sadržaj je vrlo sveobuhvatan i pogodan kao uvodna knjiga o strukturama podataka.
Druga, "Algoritmi (4. izdanje)".

Iako se zove "algoritmi", svi znamo da su algoritmi zasnovani na strukturama podataka — nizovi, redovi, stekovi, gomile, binarna stabla, heš tabele itd., sve te strukture podataka su obrađene.
Ako vam je vrijeme ograničeno, C/C++ programeri treba samo da pročitaju "Strukture podataka (C++ izdanje)", a Java programisti samo "Algoritme (4. izdanje)". Ako ne razumete iz prvog čitanja, pročitajte još jednom.
Jedan korisnik (nadimak "Sumirein muž") je lepo rekao:
Strukture podataka su kada već napišete nekoliko miliona linija, a zatim strukture podataka smanje na 900.000 linija, a performanse se udvostruče — eto, konačno ste naučili!
Četiri, iskreno rezime
Januar 2022. je vrlo važno dobro započeti.
Zato iskoristite zimski raspust da prođete kroz open source kurs Univerziteta Tsinghua na GitHub-u, kao i kroz C i strukture podataka — posle raspusta bićete kralj među kraljevima napora.
Tajno vam saopštavam: mnogi koji kažu da se na raspustu mora igrati igre i opustiti, u tajnosti se naprežu.
Zato, ako ste vi onaj koji se opušta, pazite se!
Neka vas jedan zimski raspust ne odvoji previše.
Isto važi i za one koji rade — opuštanje je u redu, ali budite na oprezu; kada treba učiti, morate moći da se pokrenete.
