Jump to content
php.lv forumi

Kāpēc PHP tik ļoti sux'o, bet tomēr mēs visi to lietojam


daGrevis

Recommended Posts

Algoritmiski spēcīgākie koderi nāk no C++, jo tur parasti datu struktūras (koki, grafi, hashtabulas, utt.) un sarežģīti algoritmi tiek visbiežāk implementēti un tieši šī iemesla dēļ arī top koderi kā skriptu valodu drīzāk izvēlās PHP, jo tur var sākt rakstīt kodu jau pēc pāris dienām.

Tāpēc, lai nodrošināt straujo FB augšanu, skeilošanos un pielāgošanos, ir/bija vajadzīgi top inženieri, tas arī ir viens no būtiskiem PHP plusiem.

 

Muļķības. PHP Facebook tiek izmantots galvenokārt vēsturisku iemeslu dēļ, gluži kā draugiem.lv. Ātri sahakoja kaut ko kopā ar php un pēc tam arī turpina.

 

Savukārt par top izstrādātājiem pasaulē pastāv cits viedoklis - tiešām labu izstrādātāju procents ir lielāks Python/Ruby/Lisp/Groovy etc valodās nekā PHP/Java/C#. Jo sevi cienošs cilvēks ar sūdu nestrādās.

 

Vai tad tas nav PHP plus, ja PHP aplikācija 100B vērtība nopērk python aplikāciju 1B vērtībā?

Atkārtošos, par to nav runa. "LOL - jau minētajā rakstā "Do not tell me that Facebook and Wikipedia are built in PHP. I’m aware! They could also be written in Brainfuck, but as long as there are smart enough people wrangling the things, they can overcome problems with the platform.""

 

Pats PHP un pythons ir rakstīts C, Ja tev vajag kaut kādus ātrus moduļus priekš PHP vai python, tu viņus raksti C.

Lai efektīvi izmantotu kādas tehnoloģijas, tev ir jābūt 2 galvas tiesas virs šīm tehnoloģijam un jāizprot to darbības principi. Lai saprastu tā pa īstam mysql indeksus, tev vismas reizi dzīvē ir jāuzraksta pašam hash tabula, vai BST. Un to visu lielākajā daļā gadījumu dara un mācās iekš C/C++.

 

Piekrītu, ka tas palīdz. C valodas minēšana man gan tīk daudz labāk nekā C++. Bet neuzskatu, ka tu esi koderis tikai tad, ja vismaz pāris gadus esi ikdienā C++ strādājis. Laboju, "koderis" varbūt arī esi, bet labu izstrādātāju tas nebūt nedefinē.

Edited by edgarsj
Link to comment
Share on other sites

  • Replies 257
  • Created
  • Last Reply

Top Posters In This Topic

Atgriežoties pie valodu izvēles, atkārtošu vēlreiz - katram savs. Ja patīk C++, tad drošvien arī ar PHP problēmu nav. Ja ir vēlēšanās pēc īsta OO un valodas viengabalainuma, tad jāmeklē kas cits.

 

Man ir paveicies, ka web izstrādes jomā varu strādāt valodā, kurā tiešām patīk strādāt.

Edited by edgarsj
Link to comment
Share on other sites

Šis jautājums codez kungam gan joprojām aktuāls. Galu galā diskusijā iesaistījos, lai noskaidrotu, kas tad ir tās Python problēmas, kas ir lielākas par PHP problēmām :) " citās valodās šo trūkumu ir vairāk"

 

Vai vari parādīt saiti uz kādu rakstu, kur Python problēmas, nekonsekvence utt, būtu izķidātas kaut uz pusi tik lielā apmērā kā http://me.veekun.com...-of-bad-design/ ?

Link to comment
Share on other sites

Jo sevi cienošs cilvēks ar sūdu nestrādās.

Sevi cienošs cilvēks izmantos pareizo rīku noteiktam uzdevumam. Web izstrādē, kur kadru rotācija notiek masveidā, ne īpaši lieliem projektiem (mazākiem par youtube vai fb), PHP der labāk, kaut vai tāpēc, ka svarīgs ir suports. Ej tagad sameklē pa 3 dienām Python programmētāju, ja steidzami vajag. Ar PHP programmētājiem nebūs problēmas.

Ar šo negribēju pateikt, ka PHP ir labāks, vai sliktāks, bet ka katrā situācijā ir jāizmanto pareizu rīku. Ar āmuru iesist naglu ir ātrāk un ērtāk, kā ar skrūvgriezni ieskrūvēt skrūvi, bet tu taču nesāksi ar āmuru sist skrūves iekšā.

Edited by Леший
Link to comment
Share on other sites

*note: konts veidots, lai apspriestu codez nostāju.

Tās īsti nav alternatīvas:

1)Piemēram PHP autoload funkcionalitāte, kas padara PHP aplikāciju struktūru un atsevišķu daļu rakstīšanu super ērtu, nav ne ruby, ne python-ā

2)Tā kā web izstrādē bieži jāraksta templeiti, tad rakstīt tos PHP valodā ir ērti, nav jāapgūst kaut kādi papildus templeitu dzinēji, kā tas ir ruby un pythonā.

3)Īsti koderi nāk no C++, PHP sintakse neprasa lieku piepūli, jo ir ļoti līdzīga c++ sintaksei, atšķirībā no ruby un python.

 

Tā varētu turpināt un turpināt.

Es piekrītu, ka var piesieties PHP dažās vietās, bet citās valodās šo trūkumu ir vairāk.

 

Tās ir tik ļoti alternatīvas, ka ja tu apzinātos cik, tu beigtu muldēt muļķības. Tu savu nostāju aizsargā ar puspatiesībām un meliem.

 

1. PHP tik ļoti sūkā, ka viņam vajag papildināt core funkcionalitāti, lai būtu autoloads. Pitonā sen neesmu kodējis -- tagad kodēju ruby, tāpēc lai aizbāztu tev muti es tev pierādīšu, ka ruby ir autoloads. (disclaimer: šī ir mana pašizdomāta autoloada funkcija, bet noteikti, ka internetā ir labāki varianti)

self|autoload % [master|1.9.3] cat test
#!/usr/bin/env ruby

def autoload(&block)
 begin
   yield
 rescue NameError => error
   if klass = error.message.scan(/uninitialized constant Special([A-Za-z]+)/)[0][0]
     file = "./special/#{ klass.downcase }"
     if File.exists?(file + ".rb") and require file
       retry
     else
       raise error
     end
   else
     raise error
   end
 end
end

autoload do
 # Kā redzams SpecialDinosaur vēl nav inklūdots/requireots.
 puts SpecialDinosaur.new.ruby
end
self|autoload % [master|1.9.3] cat special/dinosaur.rb
class SpecialDinosaur
 def ruby
   "rocks"
 end
end
self|autoload % [master|1.9.3] ./test
rocks

2. Ruby templeitu valodās tu lieto pašu ruby, ir tikai papildus minimāla sintakse(<% %> erb gadījumā vai =/- haml gadījumā), kas vajadzīga lai iesāktu rakstīt ruby. Un vispār šis arguments ir muļķīgs, jo arī paši PHPisti nereti lieto visādus atkritumus, piemēram smarty.

3.1. Īsti koderi nenāk no C++. Īsti koderi mācās visu ko, un tik pat labi var būt ģeniāli bez C++, kā par piemēru asm/C/haskell/lisp. Nav svarīgi.

3.2. Sintakse ir tikai viena no valodas fīčām, un ne jau sintakse visu izsaka, bet struktūra. Un struktūra un valodas plūdums(cik nu es zinu C++) ir ļoti atšķirīga.

 

Secinājums: Tās ir alternatīvas un labākas. Tas, ka tu tās/to nezini ir tava darīšana, nejauc citiem galvu. Es varētu tavus argumentus kaut dienu un nakti, lai gan to negrasos darīt, tieši tā pat, kā tu viņus varētu cept. Citās valodās trūkumu ir apmēram tik pat, bet parasti mazāk. Man vispār liekas, ka tu varētu būt trollis. Tādā gadījumā labs, bet ja ne -- nokaunies.

 

Par tematu: Mēs lietojam tādēļ, ka maksā. Nemainam tādēļ, ka cilvēkiem, kam no PHP nāk nauda būtu riskanti iet uz ko citu. Citi atkal nezin, ka kaut kas cits eksistē un to varētu izmantot.

Runājot par "pareizais rīks pareizajam darbam" -- PHP sākumā bija valoda muļķīšiem, tāda templeitu valodiņa, kura izauga par ko lielāku. Kā šāds rīks varētu derēt profesionāliem programmētājiem?

Edited by swiers
Link to comment
Share on other sites

To biš, php sūkā, jo tiek attistīts?

Nē, jo viņam ir limitēta kores funkcionalitāte un kur ruby ir NameError, tur PHP ir Fatal error, un tu tur neko nevari izdarīt(bez autoload, kas ir magic no core).

Edited by swiers
Link to comment
Share on other sites

swiers: nu beidz. Taa autoload implementaacija sux... Tu tak vienmeer neattieksies pie klaseem ieksh sava bloka.

 

<?php
// index.php
function __autoload($class) { require dirname(__FILE__) . "/{$class}.php"; }
$php = new Rocks;

// Rocks.php
class Rocks {}
?>

<%
# ruby_doesnt_smell_but_php_is_cool_as_well.rb
def autoload(&block)
 # stuff and things
end

ruby = Rocks.new # omg this fails wtf???

# rocks.rb
class Rocks
end
%>

Edited by rATRIJS
Link to comment
Share on other sites

Ja jau Ruby ir tik labs, kāpēc Twitter no tā atteicās?

 

Ja jau PHP ir tik labs, kāpēc Twitter to neizmanto un nekad nav izmantojis? Tu uzdod nepareizus jautājumus. Tas, ka ir lieli projekti, kas izmanto konkrētu valodu, nenozīmē, ka valoda ir izcila. RTFA.

 

Joprojām gaidu Python trūkumu sarakstu. Ar uzsvaru tieši uz valodas trūkumiem un nekonsekvenci kā augstāk minētajā ierakstā par PHP.

Link to comment
Share on other sites

Tās īsti nav alternatīvas:

1)Piemēram PHP autoload funkcionalitāte, kas padara PHP aplikāciju struktūru un atsevišķu daļu rakstīšanu super ērtu, nav ne ruby, ne python-ā

2)Tā kā web izstrādē bieži jāraksta templeiti, tad rakstīt tos PHP valodā ir ērti, nav jāapgūst kaut kādi papildus templeitu dzinēji, kā tas ir ruby un pythonā.

3)Īsti koderi nāk no C++, PHP sintakse neprasa lieku piepūli, jo ir ļoti līdzīga c++ sintaksei, atšķirībā no ruby un python.

 

Tā varētu turpināt un turpināt.

Es piekrītu, ka var piesieties PHP dažās vietās, bet citās valodās šo trūkumu ir vairāk.

 

Salīdzinājumā ar python

 

1. To gan jau var implementēt, bet kā tas darbosies? Jo klases ar vienādiem nosaukumiem var atrasties dažādās vietās.

Normālā IDE rakstot "BananaClass()" uzpiežot "alt+enter" tiek ielikts koda augšā "from app.banana import BananaClass". Pieņemsim, ka "BananaClass" atrodas vēl 5 vietās un mana IDE parādīs visus variantus.

Varbūt es līdz galam nesaprotu lietderīgumu, bet kas traucē uzrakstīt vienkāršu funkciju get_class('BananaClass')? Mazliet citā kontekstā, bet līdzīgi daru iekš javascripta.

 

 

2. Nodrāzta tēma. Cik var atkārtot, ka pliks PHP nenodrošina visas šablonu iespējas: extend`ošana, escape`ošana utt.

 

3. Tas ir tāds mierinājums vai kāda reāla statistika?

 

 

PHP man patīk, jo:

1) Drag&drop un gatavs, nav problēmu ar hostingu

2) Ļoti mazs ieejas koeficents - jauniņais pēc nedēļas jau varēs taisīt nelielas lapas

3) Var lietot bez MVC kā parastu template valodu

4) Var ātri atrast palīgu/darbinieku, jo katrs taču prot PHP

 

nepatīk:

1) neloģisks un nesaprotams - jārakājas pa php.net un jāmeklē strlen un līdzīgas funkcijas

2) atpaliek no citam valodām un pie tam pamatīgi (piemēram, PHP traits)

3) nav ērtu izstrādes rīku

4) pilns ar lameriem

5) nav normāla ietvara ar ORM, admin un citām iekļautām fēčām (līdzīgi django python)

 

Pats izvēlos PHP vienkāršām statiskām lapām, tur kur tādu django darbināt ir salīdzinoši sāpīgi. Un tas tikai tāpēc, jo man nav sakārtota masveida mājas lapu likšana, jo šobrīd tas nav aktuāli.

 

Es saprotu PHPistus, kuri saka, ka PHP ir labs un ar to daudz ko var taisīt. Tikai viena problēma, lai objektīvi novērtētu PHP vs python (vai ruby), tad sākumā jābūt PIEREDZEI, viss pārējais ir tikai svešas domas un tukša runāšana.

 

Atceros, kā pats apmeklēju Raimonda Simanovska (ruby.lv) lekcijas un īsti neizpratu tādus vārdus kā ORM, TDD. Un tagad saprotu, ka nav jēgas ietiepīgiem programmētājiem stāstīt, cik citur ir labi. Tas ir vienkārši fakts, jums tikai jāatrod laiku un jāpamēģina.

 

Es jau labu laiku strādāju ar python. Varētu teikt, ka mācījos programmēt no jauna, jo iekš PHP tā bija kaut kāda šablonu rakstīšana vairāk. Python ir tik spēcīgs, ka es vēl joprojām neesmu tajā visu izpratis.

Link to comment
Share on other sites

Pats izvēlos PHP vienkāršām statiskām lapām, tur kur tādu django darbināt ir salīdzinoši sāpīgi. Un tas tikai tāpēc, jo man nav sakārtota masveida mājas lapu likšana, jo šobrīd tas nav aktuāli.

 

Offtopic, vienkāršām lietām var derēt Flask. Es te nedaudz ievērtēju nelielam IE buga testēšanas kodam - https://gist.github.com/2169344. Paliek tikai jautājums par ātru/standarta wsgi deploymentu.

Edited by edgarsj
Link to comment
Share on other sites

Ja jau PHP ir tik labs, kāpēc Twitter to neizmanto un nekad nav izmantojis? Tu uzdod nepareizus jautājumus. Tas, ka ir lieli projekti, kas izmanto konkrētu valodu, nenozīmē, ka valoda ir izcila. RTFA.

 

Viena lieta ir kad neizmanto, jo izmanto, ko citu, pavisam cita, kad skeilošanās nolūkos aizmaina valodu prom.

 

Joprojām gaidu Python trūkumu sarakstu. Ar uzsvaru tieši uz valodas trūkumiem un nekonsekvenci kā augstāk minētajā ierakstā par PHP.

 

Es jau minēju 3 trūkumus pašā sākumā, savukārt vēl kādus 20 vispārinātu konstatējumus, kurus tur patīk saukt par trūkumiem, tu vari dabūt nomainot PHP vārdu tevis dotajā rakstā pret Python.

Atkārtoju:

1)ērts lazy loading un lazy initialization izmantojot autoload

2)ērta templeitu valoda - tā pati, kas aplikācijas valoda un strādā ātri, jo nav būvēta kā valoda iekš skriptu valodas.

3)Patīkama sintakse

4)Plašs atbalsts, gan API un to bibliotēkas, kas parasti pa priekšu ir priekš PHP, gan plašs rīku klāsts.

5)Uzliec PHP un tev ir visas biežāk izmantotās bibliotēkas, kuras strādā, nevis kā pythonā, katrai lietai jāinstalē sava bibliotēka, pie tam vienai bibliotēkai pēkši ir atbalsts līdz vienai pythona versijai, citai līdz citai. Python bibliotēkām nav vienotas konsistences.

6)Facebook uzbūvējis Virtuālo mašīnu, kas nozīmē, ka tagad PHP kods strādās pāris reizes ātrāk par Python, nemaz nerunājot par to, ka jau ilgu laiku ir pieejams kvalitatīvs PHP to C++ translators, kurš arī strādā, atšķirībā no python versijām, kuras visas ir 0.x stadijā.

 

Mēs varam runāt par visādām nereālām lietām, kā python ir skaists kods, python ir šāds un tāds, bet beigās visu izsaka tas, cik ātri mēs varam šipot produktu, mainīt produktu, likt klāt ņemt nost jaunas fīčas un beigu beigās arī skeilot, ne tikai uz serveriem, bet arī uz inženieriem.

 

 

Salīdzinājumā ar python

 

1. To gan jau var implementēt, bet kā tas darbosies? Jo klases ar vienādiem nosaukumiem var atrasties dažādās vietās.

Normālā IDE rakstot "BananaClass()" uzpiežot "alt+enter" tiek ielikts koda augšā "from app.banana import BananaClass". Pieņemsim, ka "BananaClass" atrodas vēl 5 vietās un mana IDE parādīs visus variantus.

Varbūt es līdz galam nesaprotu lietderīgumu, bet kas traucē uzrakstīt vienkāršu funkciju get_class('BananaClass')? Mazliet citā kontekstā, bet līdzīgi daru iekš javascripta.

Tādā gadījumā, tavs bana class tiks importēts vienmēr, kamēr autoload gadījumā tikai gadījumos, kad aplikācijas loģika patiešām prasīs izmantot doto moduli. Šādā situācijā PHP, ja ir 20 bibliotēkas, kas var tikt izmantotas dažādos gadījumos, reāli tiek inklūdotas tikai, piemēram, 3-5.

Piemērs tam būtu. Iet aplikācija, 1/10000 gadījumu notiek kļūda, kļuda ir jāielogo. PHP autoload gadījumā šī klase tiks ielādēta un inicializēta tikai pie pirmā reāla izsaukuma aplikācijas loģikā. Un tagad iztēlojies reāli HMVC aplikāciju, kur ir kontroleris iekš kontrolera, kur bez autoload tik ielādētas desmitiem liekas klases, kamēr ar autoload tikai tās, kuras izmantos.

Atkarībā ko dara get_class , tev tā būs jāizmanto visās vietās, kur gribi izmantot attiecīgo klasi, vai arī, ja tur domāts, ka tas atgriež instanci, tad kā būs ar statiskām klasēm, singletoniem, utt.

 

 

2. Nodrāzta tēma. Cik var atkārtot, ka pliks PHP nenodrošina visas šablonu iespējas: extend`ošana, escape`ošana utt.

Veidojot pavisam vienkāršu HMVC freimworku, tas ir pāris rindu kods, lai attiecīgās lietas nodrošinātu, kamēr python-ā ir jāraksta vesels template dzinējs, kurš pie tam tiek darbināts skirptu valoda, kas jau pēc definīcijas ir par kārtu lēnāka darbība - būvēt templeitu valodu skriptu valodā. Cits gadījums protams, ja tiek uzbūvēts C python modulis, bet šeit atkal būs daudz citas problēmas. Kamēr PHP skaisti visu rakstām PHP, gan aplikāciju, gan templeitus. Manā skatījumā tas ir liels pluss.

 

3. Tas ir tāds mierinājums vai kāda reāla statistika?

Tā ir elementāra loģika. Tikai pasaki, ka tu pythonā esi būvējis heštabulas, binary search tree, grafus, segmentu kokus, intervālu kokus, vispār sarežģītākas datu struktūras un algritmus, analizējis lielo O? Nu nedara tādas lietas tajās valodās, bet šādu lietu darīšana ir būtiska, lai izprastu softa ātrdarbību, efektivitāti, pareizu lietošanu. Tādas lietas dara C/C++, arī Paskālā, iespējams arī JAVĀ.

Tās pašas top programmētāju sacensības, IOI, ACM ir C/C++.

 

 

1) neloģisks un nesaprotams - jārakājas pa php.net un jāmeklē strlen un līdzīgas funkcijas

Google? Nekad nav bijusi problēma atras vajadzīgo lietu PHP, izmantojot google. Parasti kādu lietu priekš PHP, ko nezinu no galvas, atrodu 10-20 sekunžu laikā izmantojot googli.

 

2) atpaliek no citam valodām un pie tam pamatīgi (piemēram, PHP traits)

Ja tev vajadzīgas tik komplicētas OOP fīčas, tas nozīmē, ka tu dari kaut ko nepareizi. Es daudz labāk dažādību, ko censtos panākt ar šādu komplicitāti, veidotu izmantojot Strategy paternu.

 

 

Edited by codez
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...