

Ask YC: Python vs. PHP - symbiotic

So far I have done all of my web programming in PHP. I've also recently learned Python and so far I find the syntax to be annoying (that might be because I'm just used to PHP). But I've heard a lot of buzz on these boards about using Python. Can anyone give me the quick laundry list of advantages/disadvantages for each?
======
dmpayton
As someone whos only significant experience is in PHP and Python, I hope I can
be of some help. I started with PHP when was 13 or so. When I was about 18, I
discovered Python, and haven't looked back since.

PHP is designed primarily as a web language. As such, it's pretty simple to
get it up and running which is great for new web developers. The language
itself, however, is pretty bad and programming concepts beyond syntax are
better left to other languages. That said, I learned a lot with PHP and I
think that dealing with it's idiosyncrasies and pitfalls has made me a better
programmer overall.

Python, OTOH, is a general-purpose language that has recently gained
popularity as a web language. It has greater applicability, but it's a little
more difficult to get up and running on a web server. It's great for a new
programmer, but not necessarily a new web developer. Since you already have a
bunch of experience developing web apps, this is probably a non-issue.

We can debate advantages and disadvantages of the two languages all day. In
the end, everyone is different and everyone has their own preferred language.
Obviously, my language of choice is Python, Paul Graham is a LISPer, and I
know someone who swears by PHP, even though he's used Python and Ruby/Rails.
It doesn't matter. I say go ahead and give Python a shot. The worst that will
happen is that you've added another tool to your toolbox.

------
rguzman
<http://xkcd.com/353/>

Now more intelligently. It is very expressive (little code says a lot) and the
code is really easy to read. If you already know how to program it takes a few
hours to get your feet wet and from there the "batteries included" philosophy
makes it easy to start writing real python.

More technically, my favorite features in no particular order:

\- list comprehensions

\- functions as first are first class objects (you can pass functions around
just like any other piece of data)

\- functional programming tools

\- indentation determines scope (some dislike this, I don't like curly
braces), and this makes the code look nice

\- slice notation

\- powerful native data structures (lists, dictionaries, sets)

\- _args and_ *kwargs

\- awesome standard library

I could probably keep going...

~~~
eru
\- * * dictionary arguments

P.S. No two stars next two each other allowed on news.yc?

------
jamongkad
Oh this seems interesting and I hope that unlike Reddit posts about PHP this
will not degenerate into another flame post. So first off I would initially
recommend using PHP as it is something you already know. Learning Python is
cool(although I must confess I'm more of a Ruby user) but in the interest of
getting something up and running quickly. And factor in that you already know
PHP.

It would do you some good to learn a good PHP framework to rapidly build your
app and get something out there immediately. A framework not only makes you
look smart but it requires you to write code that does not merit you getting
stabbed in your sleep. Ergo good PHP code.

Now we can all wax rhetoric that PHP does not support Functional idioms, brain
dead functions, and name spaces. But in the interest of rapid prototyping and
ease of deployment PHP comes first in mind. PHP frameworks now most notably
Symfony(used by Yahoo to rewrite Delicious), CakePHP, Akelos, Kohana and my
personal favorite CodeIgniter changed my opinion of PHP. You can easily
abstract away logic using these frameworks. And they picked out some functions
out of PHP's bewildering list of functions so that you have a solid base to
work with.

So in a nut shell it's possible to write good PHP code but you have to
exercise some discipline for it not to turn into spaghetti code.

Another reason you might want to carefully choose a language is the type of
application you want for it. Let me explain, my company makes web based
applications that customers can host within their corporate server. Now I
don't want to waste much time trying to configure the server to run a
specialize application. In fact I need something that can be installed and
used right away in the shortest amount of time. So my choice of using PHP is
more of a business decision as well.

So just weigh things out and ask yourself what do you wish to accomplish.
Right tool for the right job.

edit: oh please consider reading this book <http://www.manning.com/reiersol/>
makes a good study on how to write good PHP code.

------
lux
Python is certainly the more flexible of the two languages, but if you're
really familiar with PHP you may be able to write your app faster in it and
get it out there faster. But there's also long-term time savings to consider
as well...

I haven't really done much in Python yet unfortunately, but I've worked quite
a bit in Perl, PHP and Ruby, and personally I don't find any of them mind-
blowingly different from one another, syntax aside. Some have more succinct
syntax for looping and other things, but no major paradigm-shift IMO (like the
one from imperative to functional).

Most of the complaints against PHP (just like MySQL) are about things that
were solved years ago, but continue to linger on anyway. I like to think of
PHP not so much as a language though, but more as a wrapper around C with
memory management and a more flexible type system. Looking at PHP that way
shows why many of its inconsistencies exist (e.g., in function names). It's
also of the "structure is optional" philosophy, which requires more discipline
to code well in.

Anyway, I think it comes down to figuring out whether it would save time now
and later to use PHP or Python.

~~~
SwellJoe
PHP doesn't have first class functions (and all of the stuff that sort of
naturally flows from closures and all of the other nice bits that make dynamic
languages so very nice to work with). It is a pretty dramatic difference
between PHP and Python, Ruby, and Perl. Idiomatic usage of the latter three
are, on the whole, similar to one another, but idiomatic usage of PHP is
dramatically different. I think if you don't see "paradigm shift" differences,
then you're writing PHP code in Perl and Ruby. In other words: You're doing it
wrong.

PHP isn't really even in the same branch of languages as the three popular
dynamic languages. It's like a fork off from C in the same way that chimps and
humans shared a common ancestor 8 million years ago. So, one could say,
"chimps are to PHP as humans are to Perl", if one wanted to be
inflammatory...and in this case, one does. Both are pretty flawed as creatures
go, but one flings poop and the other drives cars and builds roller coasters.

~~~
aston
Fun is that PHP still lets you pretend it works functionally.

<http://php.net/array_map>

<http://php.net/array_reduce>

<http://php.net/array_filter>

<http://php.net/array_walk>

<http://php.net/call_user_func_array> (apply)

<http://php.net/create_function> (lambda)

PHP is a language that encompasses all useful things in all other languages.
Which, I guess, makes it inferior.

~~~
eru
You know that you have to supply the function by _name_ as a string?

~~~
sapphirecat
I don't get what you're saying. aston _did_ say _pretend_.

Once you have the function name (or an object method array) it can be stored
in a variable with any name you want, passed around, etc. You can pretend it's
a function all you want; you can check whether it seems like a real function
with is_callable; and you can call it via call_user_func or
call_user_func_array (this distinction made necessary because PHP lacks
Python/Ruby *array unpacking syntax).

Somewhere I have a PHP class that lets you fake closure. You call
Closure::Create($real_cb, $state_data) and it gives you a callback that, when
called, calls $real_cb with $state_data plus all arguments that it was called
with. And if $state_data is an array whose elements were assigned by
reference, the 'closed-over' state is mutable.

So overall, it's a good pretense, even if foreach will always be faster than
functional style.

~~~
jamongkad
Simulating closures? that seems pretty clever I've just recently integrated a
functional extension into our private web application framework a few months
ago. Perhaps we can share notes?

------
jmtulloss
PHP:

    
    
      - Easy to deploy on a webserver
      - Easy to integrate with HTML (good for small sites)
    

Python:

    
    
      - Not ugly
      - Real and consistent object system
      - Better documentation than PHP (even though PHP's is good)
      - More consistent libraries
      - BDFL (PHP is an unregulated mess)
      - Good C API
      - Excellent web frameworks
      - Excellent desktop app support
      - Very cross platform compatible
      - http://www.python.org/dev/peps/pep-0020/
      - It makes me smile

~~~
thorax
Just so you know my position, I'm a major advocate for Python. I love it and
not long ago talked about my "fun" integrating it with Counter-Strike: Source
at PyCon, introducing Python to thousands of gaming enthusiasts who have never
coded befre.

Where can you point me to "better documentation than PHP"? This is a major
difficulty for new people getting into Python-- the documentation is really
quite poor and out-dated. My life would be much easier if the core Python
documentation was nearly as good and organized as PHP or, even, MSDN.

What I really want is for every framework and language to have documentation
as stellar as the user guide for the PHP framework Code Igniter:
<http://codeigniter.com/user_guide/>

As a long time Python hacker, I'm used to using the interactive interpreter
for my documentation needs (and then the source later). But that is absolutely
not sufficient for newbies coming into Python-- they're lost in the arcane
organization and formatting of the core Python documentation.

If you have a site that provides better core/comprehensive documentation than
the official Python docs, let me know, as there are hundreds of Python
scripters who would love it.

~~~
ijoshua
> Where can you point me to "better documentation than PHP"? This is a major
> difficulty for new people getting into Python-- the documentation is really
> quite poor and out-dated.

I disagree that the Python documentation is poor or out-dated. However, it is
fragmented in what could be considered a confusing manner. I’ve often been
searching for a particular piece of documentation, wondering if I should be
looking in the tutorial, the library reference, or the language reference.

------
doubleplus
<http://wiki.w4py.org/python-vs-php.html>

~~~
pjf
I find this comparison biased towards python.

------
paulgb
I know Python's indentation is a big turn off to most people coming from
another language; it seems almost invasive of the interpreter to pay attention
to whitespace. But you get used to it, and it becomes quite nice.

~~~
chengmi
I had the opposite reaction when I first learned Python--I thought forced
indenting was genius. It's something that should be enforced in every language
because it makes the program dramatically easier to read. One problem I've
noticed with Python code online is when leading and trailing whitespace is
stripped from code examples (e.g. posting code to a forum). The code just
stops making sense all of a sudden.

------
dazzawazza
I developed my first web app last year. I decided to use python as I already
knew it. I didn't find python got in the way at all. In fact MOST of the code
for the site is in preprocessing data and python worked equally well for that
as it did serving content. PHP developers I've spoken to say that while PHP
could have done the processing, python was a better choice.

Just thought I'd mention that.

good luck.

------
brent
The syntax that you hate will grow on you. If you're like me, at some point
you'll wonder why other languages do not use whitespace effectively. It may be
annoying at first, but when you revisit code later it makes it much more
readable imho. If you're referring to other syntactic details, many grow on
you, but luckily there is a fair amount of flexibility in coding style.

------
tptacek
I find this to be a useful assessment of PHP:

<http://www.tnx.nl/php>

------
rob
I found PHP to be easier to deploy. It might (because I'm not sure how much
memory Python apps with mod_python or mod_wsgi really take) also be a better
choice if you're making multiple sites and don't have a lot of memory on your
server (e.g., 256MB VPS) since it doesn't take up too much memory.

------
chaostheory
for me (compared to php) python is easier to debug and it's easier to organize
and abstract your logic.

not to mention I think there are cooler libraries out for python than for php,
and it's more versatile (desktop apps, utility scripts) instead of just being
web-centric

------
symbiotic
Thanks for all of the comments. doubleplus' link was particularly helpful. I
should clarify that I already have a prototype in PHP and was thinking about
switching to Python for the beta/release version if it seems worth it.

------
inovica
It depends what you want to do with it ultimately. I use both - generally PHP
for web-based front-ends and Python for heavy lifting (crawlers, text
processing etc)

------
jskinner
Also, consider that Python has a lot more non-web uses that PHP does. You'll
derive more benefit from Python proficiency than PHP.

------
wallflower
Google App Engine

Python: +2

~~~
inovica
Well, personally I'm going to stick with AWS for now. Firstly out of loyalty,
but secondly because Amazon has great support. Ok, ok - Google have brought
this out and are focused on Python for now, but that shouldn't be a reason :)
I use Python on AWS btw

------
andreyf
Learn it and find out ;)

<http://docs.python.org/tut/>

------
sabat
Sigh. I cannot in good conscience support a language in which an indent has
semantic value. It's just not right.

:-)

------
theoutlander
What about Ruby?

