What makes Magento so hard to learn

What makes Magento so hard to learn

Most of us in ecommerce application development have already heard of Magento. Some would call it new ecommerce killer app. I myself stand with that statement for many of reasons. However I would like to call it with one more name, developer killer app. This developer killer is what I literally had in mind. Magento is currently one of the most difficult PHP systems out there a developer could learn and master.

So, what exactly makes Magento so hard? Short answer would be the lack of good, and I mean really good IDE studio. You know, like the one .Net guys and girls have, something like Visual Studio. Yea, here I go again giving praises to Visual Studio and monopolistic Microsoft although I make my living using open source PHP. I should really be a shame, right? Well, no!

Let me elaborate further. Magento is true example of PHP object oriented power. It is built on object oriented concepts from ground up. This is what makes him cool, flexible and crappy. Yea, you heard me, I said crappy. Since there is no open source IDE or even commercial one that can loop trough entire Magento directories and grab all those classes and their methods you’re doomed. Irony in all of this is that is not Magento’s fault at all. However, developer is left on the mercy of good old Find All command in his favorite editor to loop trough all Magento files in order to find classes and their methods. What I expect from IDE studio is to write something like


and to get the list of all the available methods. This way I don’t need to keep track of the objects context, that’s left for my IDE to take care of. This little thing can save you hours and hours of development and debugging.

Try opening, let’s say /app/design/frontend/default/default/template/catalog/product/view.phtml file and writing down something like

$object = new Varien_Object();

Whatever IDE you use, none of them won’t give you class list when you get to

$object = new

part. Basically it’s up to you to memorize all the class names you are to use in your development. Creating an instance of Varien_Object class is probably something you won’t do, however I hope you understand what I’m trying to say. Magento is massive, it comes with over 5000 files. There are over 2700 files in /app/code/core/Mage/ folder. Am I to loop trough all of those in order to get to know which class and function lies where? I don’t think so.

Object oriented programming is no holly grail, no rocket science it all about creating object instances, running methods on those instances and getting or setting instance properties. And that’s it! This however is what makes Magento so hard to learn. In small applications with just a few classes thrown around few files, it easy to grab you’re favorite text editor and do some magic. In Magento, this approach is useless. So where does this leave us? The way I see it, developer has two options.

Option number one is to stick with poor Magento Wiki and Magento Forum in hope to find useful information needed to develop or expand some Magento functionality or template. This however always leaves you one step behind competition using the same Magento in providing client services.

Option number two is to master the OOP in Magento, pick up the classes, their public methods and properties. Grab a peace of paper and you’re favorite text editor and search for major classes representing stuff like Product, Catalog, Image and so on. Then you draw some nice diagram giving you’re self some visual representation of entire system. This way you will be able to do that little step further and start writing you’re own classes by extending the existing ones.

This may seem like a tedious and time required task to do but until some ultra smart code completion support does not come out in some of the PHP IDE you’re basically left on you’re own.

I consider my self good at understanding and coding with OOP in PHP. I’m just having problems connecting those dots in Magento system cause it’s all so scattered around and my IDE has no clue about it. Don’t know about you guys and girls, but this fact drives me crazy.

You made it all the way down here so you must have enjoyed this post! You may also like:

How To Connect Google Analytics 4 To Magento 2 Bojan Mareljic
Bojan Mareljic, | 35

How To Connect Google Analytics 4 To Magento 2

3 best open-source eCommerce platforms in 2021 Zrinka Antolovic
Zrinka Antolovic, | 7

3 best open-source eCommerce platforms in 2021

eCommerce Returns Management – a simple solution from the Fashion industry Zrinka Antolovic
Zrinka Antolovic, | 12

eCommerce Returns Management – a simple solution from the Fashion industry


  1. It’s a nightmare. I have never known anything so convoluted and sickening. After a few years of working with it I can confirm that it’s badly built and a total mess. Full of critical bugs. Client has spent $$$$$s on fixing core code and adding features that should have been quick and easy implement. If I owned an ecommerce business I would steer way clear of it! The simplest things are ridiculously complicated. Everytime I get a Magento2 task I start browsing the job ads…!

  2. OMG this post speaks to my soul. I am on my second month at a company, and after working previously in two procedural stacks… this is like an entirely different career.

    I feel like i am failing. I do not want to fail.
    I’ve been chasing a bug for like two weeks now, and i just want to run away screaming. I just got my xdebug working on my phpstorm, and I am running thru the request that i am having trouble with, and i swear to god it’s magic… I am at one part of the app debuging, and then POOF!! we jump into another file and the dubious variables that i am chasing the origin of just all of a sudden there. Poof! Ugh!!!!

    But, if I can stick it out, and become a good magento dev, then good things await!

  3. it’s easy to find the file you’re looking for when you know a little bit Magento system. Each XML (layout) build your page; you can retrieve controller information (path), block information and sometimes some actions directly sent to the block. See http://devdocs.magento.com/

  4. I had some php experience but not any MVC framework experience. So my employer fired me after 4,5 months because I was not that good with Magento. Trying to think what went wrong. They never made me build a project but just small fixes and general support of existing projects. Trying to figure out if I should give it one more try or just quit it… maybe this thing is not for me? I don’t know. Any thoughts?

  5. You have mentioned some great points here that definitely makes hard to learn magento but if a person pays attention and keep focus on learning magento following famous blogs like Inchoo.ne, Magento (https://magento.com/), Magenticians (https://magenticians.com/) and keeping him/herself updated in terms of magento news and updates then he/she definitely learn magento without any problem.

  6. “It is built on object oriented concepts from ground up. This is what makes him cool, flexible and crappy.” Bullshit. It’s crappy because it’s a very poor and overgrown implementation. Just because it calls things “classes” doesn’t make it object-oriented. Proper object-oriented programming would have made magento easier to understand, not harder.

  7. Can you tell my boss please ? He thinks I’m just not good enough to understand it, when I have absolutely no problem when working with frameworks such as Zend Framework or CodeIgniter -__-‘

  8. How to open magento project in eclipse-php-galileo???
    I want step by step guide for the same….


  9. NetBeans IDE is pretty good. Performs auto complete and integrates PHPDoc….so when you use code like this:

    $obj = Mage::getModel(‘some/model’)

    …to return an object you can add a comment above like so:

    /* @var Mage_Some_Model_Model */

    ….and NetBeans will perform autocomplete on $obj.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <blockquote cite=""> <code> <del datetime=""> <em> <s> <strike> <strong>. You may use following syntax for source code: <pre><code>$current = "Inchoo";</code></pre>.

Tell us about your project

Drop us a line. We'd love to know more about your project.