views:

712

answers:

10

I've been fooling around with PHP, MySQL, JavaScript, CSS, XHTML for about a year, and I still consider myself a beginner. Recently, I decided to start a project and work on it during my winter break from school to improve my skills in webdesign. A couple people recommended that I try and code my own blog.

Can you guys think of other projects that will approximately take 20 days? Any language/framework suggestions? I want this to be a challenge and I'm not sure if coding a blog engine would be...

Thanks,

-C.

A: 

Well, a blog engine isn't a bad choice: you have to handle dates, manage tags, sanitize and store user comments, perhaps add a mechanism to avoid spam, display and handle a calendar, manage RSS, add a secure administration module, etc.
Actually, 20 days isn't much for something full blown, so you might need to target something rather simple, but flexible enough to add features if you have time.

PhiLho
+13  A: 

To answer your question in the title: Yes.

If you want to make it more challenging, you could try picking up a framework. CodeIgniter is a very good framework for beginners, as it has excellent and thorough documentation. It actually has a very short tutorial on creating an extremely simple blog.

I don't know if you know how to use OOP, but if you don't, learning a framework will require you to learn the OOP paradigm as well as most PHP frameworks out there make use of it. Plus you'll learn about MVC (model-view-controller), which is a way of seperating concerns (seperating your presentation from your business logic, etc). As things like OOP, MVC, and so on are a lot to take in, I would highly recommend building a blog application as it will allow you to focus on learning about the new stuff rather than getting bothered about the details of how your application should work. You can also make it as complicated or as simple as you like.

I think learning how to use objects, classes, and so on is pretty challenging in itself. And as someone else has said there's a lot of stuff covered in a basic blog application - working with databases, sanitizing user input, managing RSS Feeds, calendars, spam filters, etc.

You could also use the opportunity to learn some more JavaScripty stuff, you could probably invent excuses to implement some AJAX-type stuff (in a real world application I wouldn't suggest going out of your way to find things to use AJAX with, but for learning purposes... :P).

naeblis
Thanks! not sure what OOP is but will look into it.
caglarozdag
OOP stands for Object-Oriented Programming. PHP classes are a tool for OOP, for example. Remember that OOP is not only implementation, but design. Design is very important in OOP, and is very often overlooked (with terrible results)!
strager
just couldn't recognize the acronym :)
caglarozdag
+1  A: 

Some people may tell you this is a waste of time because there is so much good blog software out there. This is definately true. However I find it to be an invaluable learning experience to code a small App that represents a technology you are interested i regardless to how much software is already out there.

JaredPar
Lol, the same goes for programming a text editor (on the desktop side): totally useless in practice, but very valuable to learn lot of things. Making a nth Tetris goes along this, too...
PhiLho
My favorite was a writing a mini-compiler in college.
JaredPar
+5  A: 

Depends on what you've been doing for the last year. Have you written any other web app, from start to finish, or have you just been working on small individual learning exercises?

The thing about this project is that a full-featured blog engine would take you much longer than 20 days. Take a look at Word Press or Moveable Type. Those guys have whole teams, working for YEARS on those projects, and they continue to add new features all the time.

I think a blog engine is a great learning project, because the list of possible features is so overwhelmingly huge that you'll have to narrow your scope a little bit, and that's a good thing to learn early in your career.

But within such a short window of time (20 days is woefully inadequate), you'll have to limit yourself to a very rudimentary project.

Having said that, I think PHP/MySQL is a perfectly reasonable choice. If that's what you've been focusing on learning, there's no need to muddy the waters by diving into a whole new language or platform. Instead, focus on learning PHP best practices (object oriented development, how to avoid SQL injection attacks, etc.)

Or maybe you want to create a very plain vanilla back-end, and focus on the user interface, using some of the cool ajaxy stuff from JQuery/ExtJS to build a responsive dynamic GUI.

So decide what you really want to learn on this project (PHP best practices, database design principles, MySQL optimization, ajax front-end development, etc) and focus on the aspects of the project that will best serve those goals. I think a blog engine is a pretty decent context for that. And when you've satisfied one of your goals, you can shift focus to something else, without abandoning the project.

I've always told people that I think the best way to learn new things is by assigning yourself a series of increasingly complex projects.

Have fun!!!

benjismith
I really agree with this. If you pick a certain area to work on now, later on you could come back to your blog and pick a different thing you want to learn about. That'll save you from writing a whole new thing from scratch later on, AND there's loads of scope for adding new features.
naeblis
Thanks! I have written 2 websites from start to finish using php/mysql. I think I will go with them again, perhaps learn a framework for the challange.
caglarozdag
+2  A: 

Blogs are a very good learning experience. In order from easiest to hardest, I recommend writing your own:

  • guest book
  • polling software
  • image gallery
  • blog
  • messageboard
  • StackOverflow clone
Juliet
A: 

I would more recommend writing an application that you feel would be useful yourself, a blog engine could be one of those, or something to keep track of the classes you've taken also might work. DO something that's interesting and that if you want to expand it you can. That way you can pick up more stuff as you move along. A blog engine seems just a bit too large though valuable.

jtyost2
A: 

I decide to learn Python and Django a few days ago. I skimmed over an online Python book, and followed the Django tutorial. The next day (Thanksgiving), I coded an Ajax-enabled todo list without much documentation reference (except looking at the Django tutorial code) during the trip and in between games and talks and such. I was suprised how quickly I picked up on Python and Django; I have never dealt with either, and indeed never dealt with a Web framework before.

What I mean to say is, if you decide to learn a Web framework like Django or something for PHP, I'd say whip something up quick. A todo list is geart for learning Ajax as well; add, update, and delete operations can be done with Ajax and are very useful. They also involve DOM manipulations (try inserting your items in as sorted list).

strager
I think I'm going to learn the CodeIgniter framework for PHP
caglarozdag
A: 

It is much more important to choose a project that you will enjoy- especially if you are doing it for fun.

I think the best way to learn is to do something thats already been done - so have a set of goals. You may think its less rewarding, but but by the time you are 'finishing' you will likely have thought of and implemented new ideas into your software.

Klathzazt
A: 

To answer your question: Maybe.

Is it an interesting project that will help you learn the language, definetly. The biggest challenge for most programmers is finishing the project. Choosing something that your'e interested in, and can immediatly start using (eating your own dog food) is great. You will find yourself continuously motivated to improve, add features, learn, etc.

The fatal problem here is the things you don't yet know. PHP is often blasted for "having bad security", and while the language itself has few security flaws, it does require discipline and knowledge on the part of the developer to develop a secure application.

Going in, you may need to accept the fact that someone might break your application, this could range from simply breaking one day, to defacement, or posts written by other purporting to be from you. Now the odds may be low if you've got a simple blog that a few friends are reading, but it's a risk you should be aware of.

preinheimer
A: 

My first modern programming project was a blog, and I know that many people are like myself in learning best through doing. Blog software starts fairly small - just slightly larger then "Hello World" with, if you like, just Load File (and cheat by manually text editing the files). You can then roll up whatever concepts interest you as an organic growth process: Want to work with CSS? Pretty up your blog. Databases? Move from flat file storage to queries. Javascript? Rich text entry editor. PHP/ASP? Dynamic content (navigation?) generation.

Each of these pieces, for a beginning project, can be done stand-alone of the others, and there are plenty other examples so you can integrate whatever technology you're interested while seeing results (which is very encouraging, especially as a beginner, IMO). This will also help you out with the real world - later on, when you want to do something fancy, you'll be forced to eat your own sloppy dogfood maintaining code; randomly grabbing miscellaneous technologies will create a frankenframework, and hey, you'll have code samples to show off that are easy to explain.

And, as other posters mention, MVC (which should come later on, which helps sink in the lesson that it SHOULDN'T come later on) and others are things to grow in to.

Serious