JavaRush /Java Blog /Random-TL /Coffee break #131. Ang papel ng Java sa pagbuo ng web at ...

Coffee break #131. Ang papel ng Java sa pagbuo ng web at mobile application. Functional programming - mga kalamangan at kahinaan

Nai-publish sa grupo

Ang papel ng Java sa pagbuo ng web at mobile application

Pinagmulan: Ang DZone Java ay isa sa mga pinaka ginagamit na programming language. Ito ay aktibong ginagamit sa pagbuo ng mga corporate, web at mobile application. Ang Java ay may mga aplikasyon sa nangungunang tech na industriya, mula sa Data Science hanggang AR/VR. Bagama't ang pagpapaunlad ng enterprise sa Java ay ang pinakasikat na kaso ng paggamit para sa wikang ito, ang mga web at mobile application ay itinuturing din na isa sa mga lugar kung saan ginagamit ang Java. Coffee break #131.  Ang papel ng Java sa pagbuo ng web at mobile application.  Functional programming - mga kalamangan at kahinaan - 1Tingnan natin kung bakit naging napakasikat ang Java development sa web at mga mobile device sa nakalipas na dalawang dekada. Isa sa mga pangunahing dahilan para gamitin ang Java para sa web at mobile ay ito ay isang mataas na pagganap ng programming language. Tinitiyak nito na ang iyong mga application ay maaaring tumakbo nang mabilis at walang anumang mga error sa pagproseso. Mayroon ding iba pang mga kadahilanan:

1. Open source

Bilang isang open source programming language, ang Java ay may ilang mga pakinabang. Una, binabawasan nito ang gastos ng proseso ng pagbuo ng aplikasyon. Pangalawa, madaling baguhin ng mga developer ang wika at madalas itong i-update dahil open source ito. Bilang karagdagan, ang Java ay may madaling basahin na syntax na nagpapadali sa pagbuo ng mga application para sa web at mga mobile device. Sa wakas, magagamit ng mga developer ang umiiral nang codebase ng wika at pagbutihin ito.

2. Cross-platform

Ang isa pang benepisyo ng programming sa Java ay ito ay isang cross-platform na wika. Ang mga developer ay maaaring magsulat ng code sa Windows at patakbuhin ito sa macOS at Linux. Ang prinsipyong "magsulat ng isang beses, tumakbo sa lahat ng dako" ay nalalapat dito. Ginagawa nitong mas madali para sa mga developer na nagtatrabaho sa iba't ibang mga system at pinapasimple ang proseso ng pagsubok sa iba't ibang mga makina. Halimbawa, maaaring subukan ng mga developer kung tatakbo nang tama ang isang program sa iba't ibang laki ng screen at operating system.

3. Mobile-friendly

Ang Java ay isang sikat na teknolohiya para sa mga mobile application. Pangunahing ginagamit ng mga developer ng Android app ang wikang Java dahil madali itong ipatupad, may mga feature na panseguridad at mga cross-platform na kakayahan. Nangangailangan ang Android ng isang malakas na wika upang sukatin ang isang application, ngunit nag-aalok ang Java ng mga kamangha-manghang kakayahan sa pag-scale. Pinapasimple din nito ang proseso ng pagsubok sa mga Android application. Ang lahat ng ito ay nagpapahiwatig na ito ay isang maaasahan at dynamic na programming language para sa paglikha ng mga mobile application.

4. Mga kasangkapan at aklatan

Ang isa sa mga pinaka makabuluhang bentahe ng Java ay ang pagiging tugma nito sa iba't ibang mga tool. Ang mga balangkas tulad ng Spring, Hibernate, Struts, Spark at iba pa ay lubos na nagpapasimple sa proseso ng pagbuo. Ang lahat ng mga tool na ito ay nag-aalok ng iba't ibang mga tampok para sa paglikha ng mga interactive at dynamic na application. Ang mga aklatan tulad ng Apache Commons, Java Standard Libraries, Maven, Jackson, atbp. ay nagbibigay-daan sa mga developer na magdagdag ng functionality nang hindi nagsusulat ng code mula sa simula.

5. Aktibong komunidad

Mayroong higit sa 7.6 milyong Java developer sa mundo. Patuloy nilang ina-update ang programming language at nagdaragdag ng mga bagong feature dito. Dahil ang Java ay ina-update tuwing 6 na buwan, ang mga developer ay may pagkakataong matuto nang mabilis at lumikha ng mas mahuhusay na produkto. Maaari mo ring gamitin ang komunidad ng Java upang makahanap ng mga sagot sa iba't ibang mga katanungan.

Ang Pagtaas ng Java sa Web Application Development

Mula noong nilikha ito noong 1995 ng Sun Microsystems, ang wikang Java ay naging isa sa mga priyoridad sa industriya ng programming. Ngayon, ginagamit ng mga kumpanya mula sa buong mundo ang programming language na ito upang lumikha ng mga web application. Ang Google, Netflix, Spotify, at Pinterest ay ilan lamang sa mga kumpanyang gumagamit ng Java sa kanilang stack ng teknolohiya. Tinatantya ng mga eksperto na higit sa 60% ng mga kumpanyang nagtatrabaho sa IT ay gumagamit ng Java sa isang anyo o iba pa. Bukod dito, nananatili itong sikat na programming language dahil sa pag-ampon nito sa iba pang mga lugar ng web development, katulad ng cloud computing, social media, enterprise development, AR, VR, at higit pa. Ito ay isang mahusay at malakas na programming language para gamitin sa mga negosyo na ngayon ay nangangailangan ng cloud-based na arkitektura. Kapag pinagsama sa JavaScript, pinapayagan ka ng Java na lumikha ng mga web application na may mataas na pagganap na maaaring tumakbo sa anumang platform.

Ang Pagtaas ng Java sa Mga Makabagong Kaso ng Paggamit

Bukod sa web development at mobile development, ang Java ay gumawa ng marka nito sa modernong teknolohikal na mundo. Ngayon, ang Java ay isang lubhang kapaki-pakinabang na programming language para sa mga siyentipikong aplikasyon. Nag-aalok ito ng ligtas, mabilis at portable na kapaligiran para sa siyentipikong pag-compute. Ang MATLAB ay isa sa pinakasikat na mga aklatan para sa Java-based na mga siyentipikong aplikasyon.
  • Ang Java ay kapaki-pakinabang din sa front-end at back-end na pag-unlad ng mga siyentipikong aplikasyon. Maaari mong gamitin ang Struts at Java Server Pages para sa front-end development at Java Core para sa back-end na pag-develop ng mga siyentipikong aplikasyon.

  • Ang Java ay kapaki-pakinabang din para sa pagsusuri ng data. Pinapayagan nito ang mga developer na lumikha ng mga solusyon sa analytics ng data gamit ang iba't ibang mga library at tool. Ngayon, natagpuan ng Java ang application sa segment ng Internet of Things. Ito ay isang pangunahing teknolohiya sa mga naka-embed na system tulad ng mga smart card at sensor. Samakatuwid, ginagamit ng mga kumpanya ang programming language na ito sa industriya ng home automation. Bilang karagdagan, ito ay aktibong ginagamit sa pagbuo ng mga teknolohiya ng streaming device at Smart TV.

  • Ang Hadoop big data platform ay nakasulat sa Java. Dahil ito ay isang open source at object-oriented na wika, ito ang pundasyon para sa mga application ng Big Data. Ang mga programming language tulad ng Scala ay madaling tumakbo sa Java Virtual Machine at gawing mas madali ang pagsusuri ng malaking data.

  • Ang gaming ay isang umuusbong at mabilis na lumalagong industriya kung saan ang Java ay malawakang ginagamit para sa iba't ibang mga aplikasyon ng paglalaro. Halimbawa, nag-aalok ito ng suporta para sa jMonkeyEngine, ang pinakamalaking open source na 3D game development engine. Bukod pa rito, ang Dalvik Virtual Machine (DVM) ay pangunahing sinusuportahan ng Java at ginagamit upang lumikha ng mga interactive na laro para sa Android.

Functional programming - mga kalamangan at kahinaan

Source: Dev.to Sa kabila ng aking tradisyonal na pag-aalinlangan sa mga hindi pamilyar na teknolohiya, kinikilala ko ang mga benepisyo ng functional programming. Nasa ibaba ang isang tinatayang listahan ng mga pakinabang na naglalarawan sa paradigma ng programming na ito. Coffee break #131.  Ang papel ng Java sa pagbuo ng web at mobile application.  Functional programming - mga kalamangan at kahinaan - 2

Ligtas na Concurrency

Hinihikayat ng functional na diskarte ang ligtas na pagkakatugma, iyon ay, ang kakayahang magpatakbo ng mga trabaho sa magkahiwalay na mga thread nang hindi nagdudulot ng mga salungatan sa thread o mga banggaan sa pagbabago. Ang dahilan ay hindi tulad ng object approach, hindi ka nagbabahagi ng isang object na ang estado ay maaaring mabago sa panahon ng pagproseso. May mga pasukan at labasan, at ang pasukan ay hindi nagbabago dahil sa iyo. Sa Java, kahit na gumamit ka ng mga bagay na "thread-safe", hindi mo magagarantiya na magkakaroon sila ng parehong mga halaga kapag tinawag ang iyong pamamaraan. Sa halimbawa sa ibaba, makikita natin na ang isang loop na nagpoproseso ng mga elemento nang paisa-isa ay madaling maproseso nang magkatulad gamit ang isang lambda function sa loob ng isang thread.
for( String item : items ) {
   process(item);
}
At ngayon ito ay nagiging:
items.parallelStream().forEach( item -> process(item) );

Mabilis na I/O

Sinusuportahan ng functional programming ang ibang diskarte kaysa sa multithreading. Nangangahulugan ito na wala na kaming hiwalay na mga thread na naghihintay para sa mga tugon ng I/O gaya ng mga tawag sa database. Ibig sabihin, pinapalaki namin ang paggamit ng CPU at bandwidth. Para sa mga application na may mataas na pagganap ito ay isang malinaw na kalamangan. Ito ay ipinatupad na may ideya na ang isang function na tawag ay maaaring magbalik ng isang Hinaharap, na hindi ang aktwal na resulta ng tawag, ngunit sa halip ay isang pangako na ibabalik ang resulta sa isang punto sa hinaharap. Sa ilang mga punto sa hinaharap, ang isang return value ay nakuha na nagpapatakbo ng function. Nangangahulugan ito na ang mga thread ng processor ay hindi naghihintay para sa database o REST na mga tawag upang makumpleto at maaaring gumawa ng iba pa.

Pagkaikli ng pagpapahayag

Nais ng mga developer ng software na maipahayag nang maganda ang mga kumplikadong ideya. Nagbibigay-daan sa iyo ang functional programming na gawin ito nang maigsi. Halimbawa, ang mga karaniwang konstruksyon tulad ng para sa mga loop ay maaaring mapalitan ng mga thread, na abstract ang karaniwan para sa mga operasyon kung saan ginagamit ang mga loop. Walang alinlangan na ang pagdaragdag ng mga function at thread ng Lambda sa Java ay nagpalawak ng kakayahang magpahayag ng mga ideya na dati nang imposible.

Bakit hindi maging functional?

Para lang ulitin ang nasa itaas: maraming benepisyo ang functional coding, kaya hindi sinusubukan ng artikulong ito na gawing pangkalahatan ang lahat sa isang kaso at sabihin na dapat ay talagang gumawa ka ng functional programming o vice versa. Ang desisyong ito ay dapat gawin nang may malinaw na pag-unawa sa mga dahilan para sa paglipat at mga potensyal na problema.

Ito ay palaging mahirap maunawaan nang intuitive

Kapag nagsusulat ng code, sinusubukan mo bang makipag-ugnayan sa computer? Kung ang komunikasyon sa isang computer ay napakahalaga sa iyo, bakit hindi sumulat sa machine code? Siyempre, ito ay napakahirap, kaya ang mga wika sa computer ay naimbento upang gawing mas madali. Pinapayagan din nila ang mga programmer na lumikha ng mga expression na mauunawaan ng ibang mga programmer. Habang ang software ay nagiging mas malaki at mas kumplikado, kailangan namin ng mga diskarte upang pamahalaan ang pagiging kumplikado. Nakamit namin ito sa pamamagitan ng mga abstraction at pagtatago ng impormasyon. Ang klase na ginagamit mo sa Java upang magpadala ng email ay medyo kumplikado, ngunit ang interface ng klase na ito ay simple. Itinatago nito ang detalyadong pagpapatupad, na ipinapakita lamang sa amin ang panlabas na bahagi ng kontrol. Ang mga feature ng wika tulad ng mga kulot na brace at square bracket ay nagsasabi sa amin ng istraktura tulad ng mga conditional statement at loop. Ngayon lang namin inililipat ang mga loop, o sa halip, recursion, at mga kundisyon sa mga function:
for( String item : items ) {
    System.out.println(item);
}
Iyon pala:
items.foreach( item -> System.out.println(item) );
Ang streaming at lambda na diskarte ay tiyak na mas maikli. Maaari mong ipahayag ang parehong pag-andar na may mas kaunting code. Ang problema ay itinatago natin ngayon ang aktwal na pag-uugali sa loob ng mga pamamaraan na kailangan nating malaman. Ang mga loop sa Java ay gumagamit ng mga keyword. Sa kabilang banda, ang mga function ng lambda ay maaaring magpatupad ng iba't ibang anyo ng recursion, at ang pangalan lang dito ang nagpapahiwatig kung ano ang ginagawa nito. Halimbawa:
boo.fooble( item -> System.out.println(item) );
Hindi mo na mababasa ang code upang maunawaan ang istraktura. Ginagawa nitong mahirap na subaybayan ang daloy ng pagpapatupad. Ang isa pang tampok ay ang function chaining, kung saan ang resulta ng isang function ay ang input ng susunod nang hindi nagtatalaga ng intermediate variable.
boolean result = boo
    .fooble( /*some code*/ )
    .bobble( /*some code*/)
    .goober( /*some code*/);
Ito ay maaaring magkaroon ng kahulugan sa may-akda ng code na ito dahil siya ay tila isinulat ang bawat function at alam kung ano ang ginagawa nito. Gayunpaman, para sa mga bago sa code, hindi ito gaanong nagsasabi sa iyo tungkol sa mga parameter, proseso, o mga halaga ng pagbabalik ng bawat function. Ngunit kung isusulat mo ang parehong bagay sa isang bagay na nagtatalaga ng mga uri, makakakuha ka ng:
Car car = boo.fooble( /*some parameters*/);
Tyre tyre = car.bobble( /*some parameters*/);
int pressure = tyre.goober( /*some parameters*/);
Maaaring hindi ito perpektong pagkakatulad, dahil ang mga parameter at anonymous na function ay hindi magkapareho, ngunit ang punto dito ay ang isang mahabang pangungusap na may hindi kilalang mga resulta at mga parameter ay mahirap basahin nang walang mas malalim na pag-unawa sa kung ano ang ginagawa ng mga function na inilarawan sa ibaba. At kaya posible na ang functional programming ay parehong lubos na nagpapahayag sa nakakagulat na maiikling mga segment ng code, ngunit hindi maintindihan ng mga taong bago sa software. Ang punto ng mga klase at interface ay upang itago ang data, upang lumikha ng magagamit muli na mga piraso ng code na hindi nangangailangan ng developer na maunawaan o marahil kahit na tingnan ang pagpapatupad. Umiiral ang mga ito para makapagtrabaho ang mga developer sa malalaking, kumplikadong sistema nang walang pananakit ng ulo. Ito ay isang maginhawang paraan upang ayusin ang code na nauugnay sa mga partikular na entity. Gayunpaman, wala akong gaanong pag-unawa sa kung paano nakakatulong ang functional programming sa pagbuo ng malalaking kumplikadong proyekto. Marahil ay may mga subjective na dahilan para dito.

Upang mapabilib ang iba sa iyong mga kakayahan

Ang ilang mga developer ng software ay sobrang insecure sa kanilang mga kasanayan na sinusubukan nilang humanga sa pamamagitan ng pagsulat ng hindi kinakailangang kumplikadong code. Bilang isang senior developer, hindi ko partikular na hinahangaan ang iba pang mga developer ng software na sumusubok na magsulat ng matalinong code. Siyempre, hindi lang ito nalalapat sa functional programming; ang parehong bagay ay maaaring mangyari sa anumang coding style. Ngunit napansin ko ang isang tiyak na intelektwal na walang kabuluhan sa mga tagapagtaguyod ng functional programming. Ang punto ay ang mga developer ng software ay hindi gumagana sa isang vacuum. Ang "matalinong" code na ito ay kailangang mapanatili, at kung ito ay mahirap maunawaan, kung gayon ito ay magiging mahirap basahin at baguhin, at mahirap i-debug. Kapag namamahala ng mga koponan, mayroon kaming mga tao sa lahat ng antas, kaya ang pinakamatalinong gawin ay magsulat ng code sa paraang mauunawaan ng lahat ng kasangkot. Ito ang dahilan kung bakit mayroon kaming malinaw na mahabang variable na pangalan, kaya nililimitahan namin ang haba ng mga pamamaraan. Ang "Smart" code ay kukuha ng dagdag na oras, kaya hindi masyadong matalinong isulat ito. Naniniwala ako na ang functional programming ay gumagamit ng parehong mga argumento tungkol sa maikli at makapangyarihang mga expression na ginawa ni Perl maraming taon na ang nakakaraan. Ipinagmamalaki ng mga tagasuporta ni Perl ang pagiging expressive nito, ang paraan ng pagsusulat nila ng mga programang napakalakas sa loob lamang ng ilang linya ng code. Ito ay totoo. Ang problema ay mahirap silang intindihin. Marahil ang functional programming ay nahulog sa parehong bitag.

Dahil ito ay isang bagong fashion

Palaging may "mainit" na bagong teknolohiya o paradigma. Ang mga bagong teknolohiya, wika at diskarte ay patuloy na umuusbong. Dapat nating patuloy na hamunin ang ating sarili at matuto ng mga bagong bagay. Ang pagiging isang software developer ay nangangahulugan ng pagsulong ng teknolohiya. Ngunit bilang mga developer ng software, dapat nating suriin para sa ating sarili kung anong mga teknolohiya ang kailangan natin upang lumikha ng isang produkto. Ang pag-aaral ng bagong sikat na teknolohiya dahil lang sa sikat ito ay hindi isang matalinong paggamit ng oras. Hindi ito nangangahulugan na hindi ka dapat matuto ng functional programming, ngunit dapat mong suriin ang mga kalamangan at kahinaan ng paradigm na ito para sa application na iyong isinusulat.

Dahil ito lang ang totoong paraan

Maraming beses bago, nakita ko ang mga developer na nagpo-promote ng ito o ang diskarte na iyon bilang ang tanging tama. Ngunit tulad ng sinabi sa akin ng isang kaibigan, ang iba't ibang mga trabaho ay nangangailangan ng iba't ibang mga tool. Halimbawa, personal kong ginagamit ang Python at PyTorch para sa artificial intelligence, bagama't maraming iba pang mga tool at teknolohiya, bawat isa ay may sariling mga pakinabang at disadvantages. Mayroong magandang dahilan upang isaalang-alang ang functional programming bilang isang opsyon para sa mga serbisyong nangangailangan ng makabuluhang scalability. Ito ay dahil sa concurrency na kaligtasan na inaalok ng diskarteng ito. Ngunit dapat mo ring malaman ang mga gastos at potensyal na panganib. Ilang taon na ang nakalipas nagkaroon ako ng katulad na karanasan sa dependency injection at Spring na itinuturing na pinakamahusay para sa trabaho. Nang tanungin ko ang mga tagasuporta ng Spring kung ano ang mga benepisyong naidudulot nito, hindi nila ako binigyan ng malinaw na mga sagot. May nakikita akong katulad ngayon sa ilang functional programming purists na mukhang nakikibahagi sa ilang uri ng relihiyosong kampanya sa halip na isang walang kinikilingan na pagsusuri ng teknolohiya. Sa pamamagitan ng paraan, ang dependency injection ay isang magandang ideya at malinaw ko nang matukoy ang mga benepisyo nito. Gayundin, sa tingin ko ang aking mga alalahanin tungkol sa functional programming ay may kinalaman sa kung paano ito ginagamit, sa halip na kung ito ay isang kapaki-pakinabang at wastong diskarte.

Konklusyon

Ang punto ng artikulong ito ay hindi upang magbigay ng isang malinaw na sagot sa tanong kung dapat mong gawin ang functional programming. Ang punto ay kung paano mo sinusuri ang anumang bagong teknolohiya o diskarte. Ang pangunahing bagay: huwag hayaang hadlangan ng iyong ego ang isang layunin na pagtatasa mula sa iyo. Ang pagbuo ng software ay hindi patunay ng iyong intelektwal na kakayahan o iyong mga personal na katangian. Ito ay tungkol sa paglikha ng halaga sa totoong mundo. Kung nakakatulong sa iyo ang functional programming, pagkatapos ay gamitin ito.
Mga komento
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION