- PeterMoulding.com
- Author
- Trainer
- Speaker
- Business Coach
- How to write a How To book
- PHP Courses
- Speaking
- Web Architect
- Australia
- Books
- Authors
- Akkana Peck
- Alex Berenson
- Andrew Nugent
- Ben Sanders
- Brock Clarke
- Chris Simms
- David Mercer
- Dianna Mullet
- Don Winslow
- Dori Smith
- Harlan Coben
- Jack McDevitt
- James Wines
- Jerry Yudelson
- John Grisham
- Kevin Mullet
- L. E. Modesitt Jr.
- Laurell K. Hamilton
- Marshall Karp
- Martina Cole
- Michael Marshall Smith
- Michel Roux Jr
- Nadia Sawalha
- Philip Pullman
- Raymond Khoury
- Richard North Patterson
- Robert Masello
- Sally Roth
- Sarah Langan
- Stella Rimington
- Stephen Booth
- Stephen King
- Stephen Leather
- T.C. Boyle
- Tom Negrino
- Tony Hillerman
- Urban Waite
- Val McDermid
- Valerio Massimo Manfredi
- Beginning GIMP
- Beginning Visual C++
- Culturalism
- Fiction
- A Drink Before The War
- A Talent for War
- Bag of Bones
- Blood and Ice
- Burn
- Dark Lady
- Dead Line
- Eclipse
- Empress of Eternity
- Exley
- Flipping Out
- Just One Look
- Nightfall
- Pet Sematary
- Savage Moon
- Skinwalkers
- Starvation Lake
- The Fallen
- The Gardens of the Dead
- The Jump
- The Last Templar
- The Mermaids Singing
- The Midnight Mayor
- The Secret Soldier
- The Summons
- The Terror of Living
- The Testament
- The Tower
- Under the Dome
- Virus
- AJAX and PHP
- Aging with Grace
- Food books
- Green Architecture
- Life Is So Good
- SQL: The Complete Reference
- The Backyard Bird Lover's Ultimate How-to Guide
- The Garden Gurus
- Authors
- Sustainability
- -18 hours left to decide the future of Australia
- Campbells vegetable stock or Massel vegetable stock?
- Carbon Sequestration
- Carbon tax for Australia is a fraud
- Copenhagen will fail
- Cost of living in Australia
- Dick Smith jumps on the population bandwagon
- Dry Run: Preventing the Next Urban Water Crisis
- Energy Saving Lights
- Garlic
- How many people can live in Australia?
- Its obsolete, throw it out!
- Julia Gillard offers 9.9 billion dollars bribe to Rob Oakeshott
- Laundry detergent
- Petrol or Diesel?
- Reflective foil batts kill
- RoHS
- Sea level to rise 3mm due to climate change
- Solar power
- Spring again in Sydney
- Sustainable fuels
- The CRUD Tax is back
- The people who make building regulations do not own houses
- Water efficiency
- Which insulation is safer, foil or wool?
- Will Australia reduce greenhouse gas emissions?
- Technology
- Android or Blackberry or iPhone or a flip phone?
- Apple versus Google 2011
- Cameras
- Cars
- Colour
- Burgundy
- Colour Blindness
- Colour Names
- Dulux colours
- Pantone colours
- Safe Colours
- Seculine ProDisk Mini colour balance card
- What Causes Colour Blindness?
- Hardware
- Batteries for the Digital Age
- Cables
- Cases
- Computer reliability
- Computrace
- Disks
- Astone ISO Gear 481E
- Best SSD for your notebook computer
- Disk block size
- Hitachi disk HDS722020ALA330
- LaCie USB 2.0 250 GB mobile hard drive design by F.A. Porsche
- SMART disk
- Samsung 2 TB HD204UI quiet low power disk for mass storage
- Seagate and Samsung merge disk business
- Select the right disk for your RAID array
- USB disk speed
- Western Digital WD20EARX 2 GB SATA 3 disk
- How long should computer hardware last?
- Keyboards
- Mainframe
- Memory cards
- Monitors
- Netbooks, notebooks, tablets, and xPads
- Network Attached Storage
- OLED Displays
- PC's are a thing of the past
- Printers
- Quiet
- Samsung Galaxy S
- Speed
- Television
- Tools
- USB
- Worst computer movies
- Xserve is dead. What next?
- Your backup will not work
- Z68 motherboards
- iPad or Acer Aspire One?
- IQ
- LG Intello Washing Machine
- Lack of a challenge
- Networks
- 802.11n wireless networking
- D-Link DIR-655 wireless router
- D-Link DWA-160 Xtreme N dual band USB adapter
- D-Link DWA-556 Xtreme N PCI Express desktop adapter
- MIMO
- NBN spends another $12 billion of our tax money on nothing
- National Broadband Network
- Netgear wireless modem router DGND3300 with 300 Mbps 802.11n
- Refrigerator kills wireless broadband
- Small Wireless Network
- TP-LINK TL-SG10005D 5 port gigabit switch
- TP-Link TL-WR1043N wireless N gigabit router
- Telstra Pre-paid Mobile Wi-Fi
- Where are the router plus proxy server combinations?
- Open Source documentation
- Software
- 7-zip
- Accounting
- Asterisk
- Audacity
- Backup software
- Bloat only in Windows
- CAD
- CDex
- Disk imaging software for copying and backup
- Exact Audio Copy
- Filezilla
- Firefox
- Java
- LibreOffice or OpenOffice?
- Linux
- 1 in 5 servers will ship with Linux
- Android phones outsell iPhone
- Another Move to Linux
- CentOS 5.5 installation on SSD and RAID 5
- Debian
- Debian 5.0.5 AMD64 installation
- Debian 5.06 installation
- Fedora
- Fedora or Ubuntu?
- Gnome or KDE?
- K9copy
- Linux 2.6.38
- Linux Gnome login settings lost
- Linux Mint
- Linux RAID, a rant
- Linux Speed
- Linux Time
- Linux reliability as demonstrated by Ubuntu 10.10
- Linux reliability as demonstrated by Ubuntu 11.4
- Linux still a struggle in 2011
- Linux workstation disk RAID 1
- Linux, NT, Windows, and SETI
- Linux, three years of progress
- London Stock Exchange switches to Linux
- Mandrake Linux 9.2
- The partition is misaligned by 48128 bytes - warning from Linux RAID
- Ubuntu
- How to fix the scroll bars in Ubuntu 11.4 Gnome
- Kubuntu 10.10 alternate installation on desktop with RAID 1
- POWbuntu
- Ubuntu 10.10 after 6 months use
- Ubuntu 10.10 alternate installation
- Ubuntu 10.10 desktop RAID 1
- Ubuntu 10.10 desktop RAID 5
- Ubuntu 10.10 desktop install on a netbook
- Ubuntu 10.10 desktop installation
- Ubuntu 10.10 netbook install on a netbook
- Ubuntu 10.10 server AMD64
- Ubuntu 10.10 upgrade to version 11.4 beta 2
- Ubuntu 10.4
- Ubuntu 11.10
- Ubuntu 11.10 first upgrade
- Ubuntu 11.4 after one month use
- Ubuntu 12.04 beta1 desktop amd64
- Ubuntu One
- Ubuntu by Microsoft?
- Ubuntu desktop upgrade 10.4 to 10.10 failed because I did not check the media
- Ubuntu strikes again
- Upgrade Ubuntu to Linux Mint 12 LDXE for extra speed
- Yes, use Linux but not that distribution!
- Nero
- OpenOffice
- OpenOffice is now Apache Office
- Project management
- Scribus
- Software for Windows and Linux
- Text editors
- Time
- Todo applications
- Tomboy notes
- Top text editors
- Version control
- VideoLAN VLC media player
- Visio
- Webmin
- Webmin installation on CentOS for Web development
- Webmin installation on Ubuntu
- What is the most popular open source software today?
- Windows
- Another Windows person goes Linux
- BAD_POOL_CALLER
- Cygwin
- Microsoft Malicious Software Removal Tool cannot find a common virus
- One of the developers of Windows XP is criminally insane
- There are unused icons on your desktop
- W32time
- Which Windows version?
- Windows 7 Home Premium
- Windows XP Stop 0x0000007B during installation
- Windows XP is a disaster
- Windows processes
- XML
- Zip, bzip, gzip, or 7zip?
- configFree
- Technology Succession Planning
- VoIP
- Web Sites
- Drupal
- Do Drupal themes have to use the GPL?
- Drupal 7
- A better search facility for Drupal
- Drupal - performance or flexibility
- Drupal 7 Fields are hard to fix
- Drupal 7 new features
- Drupal 7 ships on January 5
- Drupal 7.14
- Drupal 7.4 hits PeterMoulding.com
- Drupal function sequence
- The evolution of a module
- Undefined index: headers in DefaultMailSystem->mail() (line 54 of /modules/system/system.mail.inc).
- Undefined index: to in DefaultMailSystem->mail() (line 83 of /modules/system/system.mail.inc).
- implode(): Invalid arguments passed in DefaultMailSystem->format() (line 23 of /modules/system/system.mail.inc).
- Drupal 8
- Drupal Code Load Cut
- Drupal How To
- Drupal Modules
- Backup and Migrate
- Browscap
- CKEditor with Drupal WYSIWYG
- Captcha
- Cel
- Colorbox
- Content Construction Kit
- Content type
- Devel module for Drupal
- Drupal Rules as an automation language
- Drupal Spam add-on module
- Form alter to node
- IMCE
- IMCE Wysiwyg bridge
- ImageAPI
- Jdog
- Lightbox2
- Module variable
- Node Gallery Access
- Node_Gallery
- Path
- Path redirect
- Pathauto
- Pet
- Search
- Service links
- Session Variable
- Statistics
- Taxonomy
- Token
- Token ex
- Transliteration
- Trigger
- Watch
- Other modules
- Drupal Training
- Drupal access controls need a major rewrite
- Drupal coding tricks
- Drupal performance
- Drupal themes for the future
- Drupal.org colours
- Import existing data into Drupal
- Multiple Web sites made easy using Drupal multisite and the right start
- drupal_lookup_path()
- Adobe PDF
- Apache
- Apache Mahout
- Audi.com
- Bleet
- CSS Strikes Again
- CSS or xCSS
- Can you believe Facebook or email?
- Content Management Systems
- Databases
- Facebook scam
- Font
- Fonts
- HTML
- Install Apache, MySQL, and PHP 5 in Ubuntu 11.4 using the Ubuntu Software Centre
- Language Codes
- Marketing
- Memcache
- Nginx
- Open source development hits another roadblock
- Oscars
- PHP
- SPDY
- Search software
- Techoni.com.au
- Theme themes
- Things to hate on Web sites
- U.S. Patent No. 6,985,875
- Virtual Private Server
- Visible Improvement
- Web 4.0
- Web browser usage
- Web browsers
- Web site development
- Bluefish
- Crying over spilt code
- Eclipse and PHP
- Getting a Git client, a story of ancient technology and pain
- HTTrack
- MVC
- Netbeans
- PHP or ..., CakePHP/Symfony/ZF versus ...
- Programming
- Superfish
- Web browser emulators for testing your Web site
- Web development frameworks
- Web site books
- Web site development on your own computer
- Webmin or phpMyAdmin or cPanel for creating databases?
- aiki framework
- jQuery
- Views development - Learn Fields first
- Views development - Learn Actions and Rules
- jQuery .each()
- jQuery .has()
- jQuery .is()
- jQuery and Firefox Firebug
- jQuery children
- jQuery for people not using Drupal - Installation and getting started
- jQuery hover
- jQuery hover de-duplication example
- jQuery or CSS?
- jQuery performance
- jQuery tests
- Web site hosting
- Westpac Web site still broken after two years and ten months
- Wordpress wins another CMS survey
- Drupal
PHP or ..., CakePHP/Symfony/ZF versus ...
Submitted by Peter on Fri, 2011-10-21 21:16
Should you develop Web applications using PHP or something else? Should you develop Web applications using a framework such as CakePHP, Symfony, Zend Framework or something else? Both common questions. Occasionally someone with experience provides there viewpoint and frequently those viewpoints are quoted as justification for something that is not comparable. Take a closer look at some of the logic.
Availability of staff
Dharmesh Shah is the CTO at HubSpot and chose PHP then argued python is a better choice. One of his reasons for selecting PHP was availability of staff. Our Universities, and it appears to be similar in many countries overseas, churn out ten Java programmers for every one PHP programmers but there are more PHP programmers available. Why is it easier to hire a PHP programmer than a Java programmer.
Based on observation of Web oriented projects, Java based projects require five times more programmers than PHP based projects and for four times as long. You need twenty times more Java programmers to accomplish the same thing. Java may be a good choice outside the Web but not on the web.
Many programmers suffer through Java classes at college and learn PHP on the side for their own projects. Some of those programmers switch to PHP as soon as they leave college. The number of Java programmers steadily shrinks after college while the number of PHP programmers increases plus a lot of non programmers add some PHP to their Web projects and are soon programming.
The major technology job focused Web sites are always looking for people with experience in Java followed by .NET followed by PHP. The PHP jobs never ask for .NET or Java experience because the PHP oriented projects do not need the other languages. The .NET and Java jobs almost always ask for PHP experience because they all use PHP for something, a Web interface, a project manager, a Wiki, something, and often a few important applications.
You rarely read about a PHP based Web application switching to Java. You read about lots of Java sites switching to PHP. I switched several of them.
With all that extra PHP activity and the rapid expansion of PHP usage, the supply of PHP programmers is greater than the need because PHP is so easy to learn.
PHP, Python, TCL, ..., is easy to learn
Several languages are promoted as easy to learn. PHP and Python lead the way based on actual results. PHP beats Python about ten to one then Python beats the rest by one hundred to one. Ruby was popular for a while but almost always among people with formal training in a similar language. Python's success outside the Web is better than Python in the Web and a big use for Python is replacing the ancient Perl language outside the Web.
In the Web client area, down in the Web browser, Javascript is the only language going and very few people are successful with anything complicated in Javascript. jQuery is almost a macro language for Javascript and a lot of people with no formal programming training are successful with jQuery. The reason is jQuery looks a lot like the selectors in CSS and a lot of non programmers learn CSS. You can take someone experienced with CSS then step them easily into jQuery. By comparison, Javascript is a black art suitable only for masochists.
... is good for the easy stuff by not for complex applications
A common complaint about about programming languages is the difficulty of building complex applications in a given language. Someone says language A is easy to use for the easy stuff then difficult to use for the complex stuff and you should switch to B. In kicks another person with a story about a failure with B then a success with A. Rarely is there enough detail to work out the true reason for a failure but when there is, it is often a wrong choice about how to develop, not the language.
Take the example of the simple choice between Java and .NET. .NET started as the Microsoft name for their version of Java then Microsoft dumped a whole lot of other things in .NET. The first years of .NET were as painful and wasteful as the first years of Java. Nothing worked. Documentation was missing, wrong, or out of date. .NET crashed operating systems the instant you applied the most trivial update. Exactly like the first ten years of Java. Java was more than ten years ahead of .NET and there was a few years when Java was a better choice based purely on the maturity of Java. Anyone choosing a language should choose something that is either mature or easy to change. Java is not easy to change. .NET is not easy to change. They are the wrong choices when you need flexibility, the wrong choices for the web, and both were, for a long time, the wrong choices for maturity.
Frameworks help you deliver an application faster than writing the whole application from the start. If you are starting a big complicated project in raw code, the decision to not use a framework is far more damaging than the choice of language or of framework. Most of the languages have only one framework or only one Web oriented framework. PHP gives you a choice of frameworks. The number of frameworks indicates how easy it is to develop in PHP then share parts of your development. For a Web based application, you choose PHP then argue about which framework you should use.
Symfony is the most progressive framework for PHP and has reached the second generation with serious performance improvements, something that should be easy to achieve considering how slow it was in version one. Symfony is a good example of almost all the arguments you read. Symfony version one made code writing easier but was slow to execute and almost everyone recommended a different framework. Almost everything you read today about Symfony is based on version one. Version two is faster. Version two might be slower than the code I write but is is up there with the speed of the average programmer and the speed of execution is not a big issue. Some of the frameworks are creating their second generation but are still working on it. If you had to choose today, you would probably choose Symfony. In a few months time one of the other frameworks could be the better choice. Update October, 2011. CakePHP version 2 has a stable release.
I personally like the freedom of some other frameworks, the freedom to use parts of the framework without using the whole framework. On a couple of occasions, I added components from frameworks into existing projects then run up against an endless chain of prerequisites and ripped the code out.
For learning a framework, I like the frameworks with small starter Web applications so you can see it working. You install the Apache Web server then view the Apache verification page in your Web browser. You install PHP and verify PHP works by using a web page containing a line of PHP code. Then you install the framework and visit a page that proves the framework is working. You keep that basic demo working to verify the framework when adding additional components.
One of the frameworks I chose in the past is headed in a new direction featuring complexity far exceeding the requirements of a Web oriented framework. Some frameworks hit the point where design decisions are political, not practical, and you may have to jump ship. Changing frameworks can be difficult because they are inside the skin of your application. Some of the version 2
frameworks look like they are suitable only for very large applications where you commit to using the framework exclusively.
Content management
A content management system can give you far greater productivity gains than a framework and be far easier to replace when you decide to change. A good CMS keeps the data separate from the code and you should be able to move your data to a fifferent CMS far easier than moving your code to a different framework.
As a comparison, a framework might supply from 20% up to 60% of your code while a CMS supplies from 90% up to 98% of your code. Replacing 50% is a pain compared to replacing 98%. Lots of people switch their web sites between Wordpress, Joomla, and Drupal. Few people switch their sites from Symfony to Zend Framework or between any other combination of frameworks.
Javascript of the server
Lots of people recommend using Javascript as the development language on the Web server. Javascript is a marketing name for Actionscript. Actionscript was renamed Javascript to cash in on the media attention lavished on Java many years ago. Actionscript failed on the server for several good reasons.
Javascript in the client is close to dead due to jQuery and is used only to add the occasional logic decision or array processing. Smartphone applications were killing Javascript for a while but now everyone is over the fashion for iPhones, nearly over the fashion for Android and iPads, and has gone back to accessing the Web through Web browsers because all those hand held devices can now use real Web browsers.
The semantic Web
The semantic Web, the thing all good Web developers work towards, separates content from decoration. Most programming languages separate content from decoration. Python and a small number of other languages break the semantic approach by giving special meaning to spacing.
Python actually depends on indentation. The very first time you edit or change Python code, the indentation is exposed to change and the whole program logic is destroyed. Python developers battle on because they think their code looks pretty or clean. People working on Python code from other developers often report major loss of functionality. Suddenly you have to use exactly the same editor with exactly the same settings.
.NET
Based on comments by people leading projects and the people paying the bills for development, .NET is a consistently bad choice. Because .NET is a jumble of many different things, I though .NET would sort itself out and some of the many components would be useful for something. People using .NET are saying there is always at least one part spoiling .NET for everyone else. If you a meal at a restaurant and one of the ingredients makes you sick, do you care which ingredient caused the problem? No, in most cases you just stop eating at that restaurant. A lot of people and companies are moving away from .NET because of the bad meals.
To Web or not to Web?
Some applications are best developed outside the Web. Variations of the C language are good for use outside the Web. Perl/Python/... might be good for one off quick utilities. PHP rules the Web server. jQuery is the new ruler of the Web browser. Web developers then have to choose a framework or jump ten years ahead and use a CMS. Of all the decisions, the choice between building your application as a Web application or as a non web application is the most significant. In many cases a non Web application is best served by a Web based service and only a small amount of code is written outside the Web.
Replacing people
Half the development projects require a replacement person during the project due to time overruns, pregnancy, health, holidays, or a conflicting contract. Half of the people you replace are critical developers with specific training and experience. You will have problems replacing some experts at short notice. Choose technologies where there are a good supply of replacements.
In Australia today, you would start with PHP instead of Java or .NET based purely on availability of staff. If it is a Web based application, PHP is a double winner as the clear leader on the Web. Outside of the Web, there are a lot of choices with Java and .NET being the main ones to avoid.
There are also shortages of people experienced with security and databases. Security is usually handled outside the application by using a VPN or operating system options. The database expert shortage is more of a problem in the application development area. Should you be choosing a database, Oracle can be a difficult database and Oracle experts are always in short supply.
MVC
MVC is the Model View Controller approach. Nobody agrees on exactly how you implement or use MVC, they just agree it is a good idea. The View part is the presentation layer and everyone agrees there should be no data conversions or business logic in the View. They then put logic into the View layer to
Ruby on Rails
Ruby is a language with some interesting ideas and some strange ideas. Ruby on Rails (RoR) is a Web development framework for Ruby. RoR appears to be more popular than Ruby. Some PHP based frameworks have a similar approach, or a similar structure, to RoR. Codeigniter is the best known PHP framework with similarities to RoR. Kohana was developed from Codeigniter and shares the RoR similarities. Yii Framework is also similar to RoR.
Read all about it!
CakePHP 2.0.0
Codeigniter
Kohana
Symfony
Zend Framework 2.0 requirements as an example of code architecture
Zend Framework 2.0 Requirements
Conclusion
The language is not important. Work from the type of application you want to build through to how you will develop the application and the availability of people. Choose the most complete set of base code for the project from those free open languages where you can easily hire people. In most cases you will end up with one easy choice for that type of application.








