Sunday, November 21, 2010

PHP? Fine with me


Have ever you heard "Ewww, you use PHP? I thought you were cool!"?
Despite having just been using PHP for 2 weeks for a company project, I have heard some of those from my colleagues who are using Python and Ruby for theirs. PHP has always been considered as creepy by many web developers, especially those who work on big systems with back-end and front-end components. I agree with those to certain points:
  • PHP code is usually a mess of spaghetti where server code wraps SQL query and projects whatever to HTML
  • PHP is by far not an expressive language, as not much as LISP family.
  • PHP development is never actually designed but hacked but a group of people want to fill in their needs without any concerns about the language big picture.
That answers why you are very likely to run into
  • Interface semantic story - the assumption about how the interface will be used which cant be enforced by the compiler. The semantic interface includes consideration such as "Method A must be called before Method B" (lack of design),
  • Messy PHP code (the lack of expressive power)
  • And a function with a perfect name but doesn't work while another with a 'more awkward' name does (it was HACKED by a group NOT a team)
Yet, despite of that you can find PHP here and there. PHP can make a good demonstration for worse-is-better principal, the messy code enables programmers develop sites with a few pages and interacts with the same number of db tables fast and easy, think about the pain you have to suffer if using an enterprise-standard solution such as J2EE. PHP is not well-known for its scalability but it does not mean it would take you 5 minutes to load a page and except client's target is the second Facebook, entrepreneur and start-up in general find PHP as an acceptable solution to have their projects. PHP also goes really with Apache (#mod_php) and thank to that, you can run PHP on almost every 10$/month hosting server.
Last but not least the core value of PHP has never been a complete server side language but a TEMPLATING SYSTEM, enabling developer to create dynamic content and at the same time keeping the code designer-readable. Many big guys are using PHP such as MailChimp, Yahoo and probably the most well-known: Facebook. Those manages to live with PHP while keeping their system scalable all because PHP is used as what it's meant to be: a templating language supported by a proper back-end. And with MVC framework such as Yii or Zen, where PHP core drawbacks such as class loading mechanism is resolved, PHP is going to live for a couple of years more.

Friday, November 12, 2010

Internship timing - up and down

People have prejudice, some even love it. And my prejudice about internship time is that "In the whole year, between October and February is the worst time to look for an internship position". That thought came around a year ago when I learned the fact that at the end of the year, companies tend to finish off projects and wrap up the paperwork rather than optimize the management structure or looking for new positions. I once thought that it would be better if I could have my internship start at March.
Seems like I was wrong, again. As there is always something going wild in a software project, this period of time is like a sprint and much more interesting than a marathon. Along the way to the ultimate goal, a release, bends and ravines are just appearing from no where and those involving in that race do not even have time to take a break, let alone arguing with customers. This is the precious time where decisions are made, and different from the elaboration phase, these decisions are highly practical and many times go against what I was taught at school (badass practice)

Market at the end of the year is pretty lively with dozens of customer yelling "Gimme the web site, we need it for the Christmas campaign" (Christmas CDs) or "Look at the site, it is not biopeutic enough" and "we are considering changing the layout for the coming Christmas and new year" at the same time (customer's business is somewhere between biology and therapeutic). So these days the office runs at its full capacity, at least for the boss and the little intern who happens to live at the office. Crap, the red fat bastard is against him!!!

But only during such high time an intern can be put in charge for a new project (either because others got caught in ongoing projects or they get bored of such type of project already). And that experience is precious. You learn, in the hard and only way, to become a full-stack developer. It takes a lot of further practice, knowledge, and experience to become a growth hacker, but this indeeds a vey good start already.

Well, every coin has two sides, doesn't it? A dozen of bad things occur when year end and internship come together
  • People are incredibly busy and asking a question is such a pain, regardless the importance and intelligence level of it.
  • Researching new technologies and services are happily waiting 'till next Spring (and at Vietnam where cool stuff get blocked)
  • Having the heart breaking feeling as if your app is crashed 10 minutes before assignment deadline for 2 months
  • People cannot keep being calm all the time and the innocent intern has the tendency to become the source of trouble/argument even through he has little to do with the problem (or even didn't do a thing)
Oh man, Christmas "the celebration of the birth of commercialism..." people are sure trying to get the most out of it.

Monday, November 1, 2010

Internship report

Introduction
  • Company introduction
  • Company market segments and clients
  • Description of kind of work done by the company
  • Management structure
  • Difference in working environment between university and company
  • Work processes from client contact to final signoff
Processes and documents
  • Discussion of what processes, documents and standards are used within the company
  • Discussion on the strengths and weaknesses
  • A brief statement of whom you have spoken with in your company, what roles they occupy, how you are related to them.
Projects
  • Background of projects (existing or not, duration, customer and industry)
So far I have been involved in 2 projects and a similarity between them is that they are all on-going web projects. Aside from that, it is hard to find another commonality among those. While one project involves e-commerce site management and PayPal integration, the other has clearly separated back-end and front-end components. Customers of these projects come from different industries, but they all can be described as entrepreneurs. The wide nature of the works leads to various duration, ranging from approximately to weeks. Details of the projects are covered in the following sections
  • Project description
    • Biopeutic: an e-commerce web site is written in python, uses WARP, a company internal framework facilitating CRUD tasks and is integrated with PayPal for banking transactions.
    • Surf Said Fred. Backend, front-end, Yii framework.
  • Requirements (?! redundant)
    • Biopeutic: Python and WARP and Twisted
    • Surf Said Fred: Yii, (Google Map + iPhone)
  • Schedule
  • Tools and skills required
    • Sufficient knowledge about the programming languages (python, php and objective C) and the ability to apply that language in OOP models.
    • Adequate knowledge about frameworks used in projects (Yii and WARP)
    • Thorough understanding about MVC models especially about responsibility of each component and interaction between each other.
    • Intermediate Unix-system skills as both are web site projects and run on dedicated servers.
  • Resources (number of people/time/external input)
Your learning
  • Experiences from the internship: technologies, processes and any other
The internship goes against all of the education I received in RMIT about project management. Since the first time being taught about software engineering in semester 2, I have assumed that Agile, RUP and CMMI are widely used among IT companies to efficiently control their projects and factors such as business analysis, code quality or testing are strongly focused and focused equally among projects. Before starting the job I have been well aware that heavy weight methodologies (e.g CMMI) is out of question. But now, even light weight methodologies left in hand such as XP or Scrum customer sucks, and the website might not in a high enough priority for them. Even SSF is not really agile although the customer is much more active than biopeutic
  • How does it fit the overall career expectation
  • How do you expect to learn most new things
  • The need of additional resources to learn