Where to start? - Beginner Level to Expert PHP Website Developer
This is a message to my previous self (like how Rimmer went back to tell his-17-year-old-self to invent the Tension Sheet).
I’ve been hacking away at PHP for about 9 years now. Before that, I was a magazine advertising sales person (with a million ideas but limited computer experience) who dreaded the prospect of ending up like Jack Lemon out of Glengarry Glen Ross. It was not long after my first few months of WYSIWYG HTML editing when I decided to learn PHP in order to add some bells and whistles to my fledgling website.
Nowadays I realise the extent to which I learned about software the ‘wrong way’. I was self-learning from the outside-in rather than from the inside-out.
As an analogy: I saw a car and wanted to learn how to make one. So, I started with the bits that I saw first - the panels on a chassis on wheels. It kind of worked, but it was still a struggle getting the car to move. After some time, I looked at other cars and realised that they had engines in them. So, I set about adding one to my car. I guess, if I’d had the nouse to have gone on a motor engineeering course, the first lesson might have outlined the principals of combustion. This would have made the whole learning process alot easier.
Learning about web design was a similar experience. It was a truly ‘idea-driven learning process’. Each technical obstacle that got in the way of an idea necessitated the need to learn new skills to overcome it. Each skill or technology was learned only when it was needed - ‘as a means to an end’. New skills lead to new ideas. So, the order of the ‘educational course structure’ that ensued, was a pretty ramshackle affair.
Seeing a website as ‘a collection of pages’ -> “I can make one of those” -> Editing WYSIWYG HTML -> Copying & Pasting JavaScripts (Client-side fancies) -> Adding a few host-provided Perl Scripts to handle simple forms (digging into Server Side) -> Hacking some of my own simple PHP scripts -> “What’s this .htaccess thingy?” -> Getting to grips with MySQL -> a bit more Apache -> Digging into Linux -> ..etc.-> “Gosh the project is getting complex! I need some version control“ -> ..etc…. -> eventually seeing ‘a website’ as an application as opposed to ‘a collection of documents and images’.
This kind of self-learning may have been very satisfying but is definitely not the best way to go about software design. There are still many first-principals that I am aware of lacking.
(Oh, Hindsight. Why art though always one step ahead!?)
If I could turn back the clock and learn about PHP software design the correct/faster way I’d study and start practicing the following topics :
- Learn General Software Design Principals / How Computers Work - Linux/PC/Mac- book: ???? suggest one
- Learn PHP syntax - - Book: ????? (I learned from a PHP3 book : Professional PHP Programming by Jesus Castagnetto, et al. (Wrox) ) - See: PHP for the absolute beginner
- Learn Object Oriented Programming (OOP) / Design Patterns - Book: PHP 5 Objects, Patterns, and Practice by Matt Zandstra. (Apress)
- Learn about Version Control - Book: Pragmatic Version Control using Subversion by Mike Mason
- Learn about Domain Driven Design - Book: Domain-Driven Design, Eric Evans. (Addison Wesley)
- Learn a PHP Framework - like Zend Framework
- Learn A New, Different, Programming Language…Book: ???
If you are a beginner its almost worth spending a month ploughing through all these books straight way - even if you don’t understand them on the first reading. Then, go through each one again, at a slower pace, following the code examples.
I guess the other thing my previous self should do is take a computer course somewhere along the line. ;o)
Mais, je ne regrette rein.
Afterthought.
In some ways, in the early days, seeing a website as a ‘collection of documents’ probably gave me (and the other newbies) an SEO advantage over the ‘classic software designers’. In the classic MVC pattern, the ‘user interface’ is completely seperated from the ‘model’. This may have led ‘proper web software designers’ to be fixated with the idea that the ‘web imprint’ is part of the ‘user interface’ or ‘View’ (rather than as part of ‘the model’).
In my opinion, the ‘web imprint’ (i.e. “the collection of meta titles, keywords, URLS, content text, links, link text, cross links, information architecture, robot index/noindex tags,.. etc that defines a website from the client’s perspective”) is firmly part of ‘the model’ and should never be treated as an interchangeable ‘view’ unless SEO is not an issue.
Your Comments Please
If anyone can suggest a good, up-to-date, book that gives a thorough intro into PHP 5/6 syntax i’d be interested to hear about it. - Feel free to comment.
Also, if you are an experienced web designer i’d be interested in hearing your ‘message to your, newbie, previous-self’ with regards to learning about software principals and web design.
—–
UPDATE - 17th May 2009
I only wrote this post a couple of days ago and, since then, I have stumbled accross Sun Microsystem’s Java Learning Series for young programmers. What a fantastic idea - i think that learning this stuff is essential. It might actually give kids a practical context within which they apply the stuff they learn in other subjects. Programming requires basic maths etc. and when it comes to creating a software model - the World is their oyster.
For me, there were many mathematical concepts that I simply could not grasp until I discovered that i had been applying them in programming with no problems whatsoever. –”Aaah, so thats what a ‘function’ is. Aaah, I see now.”
Anyway, even though its an ‘entry into programming for non-adults’ I’m thinking of going through it to see what i’m missing.
See; http://java.sun.com/new2java/learning/young_developers.jsp
I think i was about 7 years old when I first touched a ‘BBC desktop computer’, but in those days, computers were very uncool. - oh how things change.