{"id":140,"date":"2022-04-19T23:54:39","date_gmt":"2022-04-19T23:54:39","guid":{"rendered":"https:\/\/karwin.com\/blog\/?p=140"},"modified":"2022-04-19T23:54:39","modified_gmt":"2022-04-19T23:54:39","slug":"beginner-web-programming-projects","status":"publish","type":"post","link":"https:\/\/karwin.com\/blog\/index.php\/2022\/04\/19\/beginner-web-programming-projects\/","title":{"rendered":"Beginner Web Programming Projects"},"content":{"rendered":"\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Can someone suggest a web application project for beginners?\u00a0What would be a good project? Should I follow a how to make a tutorial or figure it out on my own?<\/p><\/blockquote>\n\n\n\n<p>This is a frequent question from new programmers. I wrote a post in 2020 about this. Below is a reproduction of my post. It was in response to a question specifically about learning PHP, but similar advice would be true for other programming languages.<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<p>The best way to learn PHP, or really any other language, is by\u00a0<em>practicing writing code<\/em>. This is probably echoed by many of the other answers.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Pick a simple practice project, and implement it. Then pick another one. You don&#8217;t have to create a beautiful website to practice. Create an ugly website that serves as your sandbox for trying out code.<\/li><li>Learn from mistakes. Try something different.<\/li><li>Go outside your comfort zone. Find a new group of functions in the manual and try out each one. For example:\u00a0<a rel=\"noreferrer noopener\" href=\"http:\/\/php.net\/manual\/en\/book.array.php\" target=\"_blank\">Arrays<\/a>\u00a0or\u00a0<a rel=\"noreferrer noopener\" href=\"http:\/\/php.net\/manual\/en\/book.strings.php\" target=\"_blank\">Strings<\/a>\u00a0or\u00a0<a rel=\"noreferrer noopener\" href=\"http:\/\/php.net\/SPL\" target=\"_blank\">SPL<\/a>.<\/li><li>Learn about\u00a0<a rel=\"noreferrer noopener\" href=\"http:\/\/www.phptherightway.com\/\" target=\"_blank\">PHP: The Right Way<\/a>.<\/li><li>Learn about Laravel, the\u00a0<a rel=\"noreferrer noopener\" href=\"http:\/\/laravel.com\/\" target=\"_blank\">The PHP Framework For Web Artisans<\/a>. Really. The days of arguing over the best PHP framework are over.<\/li><li>Learn about security (see\u00a0<a rel=\"noreferrer noopener\" href=\"https:\/\/www.owasp.org\/index.php\/Main_Page\" target=\"_blank\">OWASP<\/a>).<\/li><li>Learn about testing code (<a rel=\"noreferrer noopener\" href=\"https:\/\/phpunit.de\/\" target=\"_blank\">PHPUnit, the PHP Testing Framework<\/a>).<\/li><li>Subscribe to PHP blogs like\u00a0<a rel=\"noreferrer noopener\" href=\"http:\/\/www.planet-php.net\/\" target=\"_blank\">Planet PHP<\/a>. Attend\u00a0<a rel=\"noreferrer noopener\" href=\"http:\/\/php.ug\/\" target=\"_blank\">PHP community users&#8217; groups<\/a>\u00a0or\u00a0<a rel=\"noreferrer noopener\" href=\"http:\/\/www.php.net\/conferences\/\" target=\"_blank\">PHP Conferences around the world<\/a>.<\/li><li>Read other PHP code. Download WordPress or MediaWiki, both widely used and mature PHP projects, and study the code. What&#8217;s good about it? What&#8217;s lousy about it? There are bits of code in any project that are gems, and some that are garbage.<\/li><\/ul>\n\n\n\n<p>Finally, there&#8217;s a secret way to learn any skill better than you can learn it on your own:\u00a0<strong>teach it to someone else.<\/strong><\/p>\n\n\n\n<p>As for a suggestion for a project to practice, I would recommend you develop\u00a0<strong>a blog application similar to WordPress.<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>It&#8217;s very simple at first: just a database table that stores blog posts by date, one PHP script to view them, and one PHP script to author them.<\/li><li>Add authentication, so only the blog owner can write posts. Be sure to read&nbsp;<a href=\"http:\/\/blog.codinghorror.com\/youre-probably-storing-passwords-incorrectly\/\" target=\"_blank\" rel=\"noreferrer noopener\">You&#8217;re Probably Storing Passwords Incorrectly<\/a>.<\/li><li>Add tags, so the blog owner can categorize posts and users can view posts in that category. You&#8217;ll learn what a many-to-many relationship is.<\/li><li>Add comments so readers can post too.<\/li><li>Add captcha support or logins for users. Integrate with OpenID, Facebook, Google authentication APIs. Learn&nbsp;<a href=\"http:\/\/oauth.net\/2\/\" target=\"_blank\" rel=\"noreferrer noopener\">OAuth2<\/a>.<\/li><li>Add a text search function. Learn about a fulltext search engine like&nbsp;<a href=\"http:\/\/sphinxsearch.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Sphinx Search<\/a>.<\/li><li>Add some kind of email notification or RSS feed, so users can be notified when a new post appears.<\/li><li>Refactor your comments system to use&nbsp;<a href=\"http:\/\/disqus.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">Disqus<\/a>, as a way to embed a web service into your application.<\/li><li>Refactor the whole app to an MVC framework, to learn what it takes to do a major overhaul of your code without breaking things.<\/li><li>Write&nbsp;<a href=\"https:\/\/phpunit.de\/\" target=\"_blank\" rel=\"noreferrer noopener\">unit tests<\/a>&nbsp;for your classes that you wrote for the MVC implementation.<\/li><\/ol>\n\n\n\n<p>I would recommend that you do not follow a tutorial, and instead try to design the application on your own. It will take longer, but I guarantee you&#8217;ll learn more about coding. Anyone can follow a tutorial and type in the steps, without knowing what&#8217;s happening. If you do not use a tutorial, you&#8217;ll have to think harder about how to solve the problems that come up. This is a necessary skill if you want to be a programmer.<\/p>\n\n\n\n<p>But of course you need to read documentation or how-to articles on some of the individual pieces I included in the list above.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Can someone suggest a web application project for beginners?\u00a0What would be a good project? Should I follow a how to make a tutorial or figure it out on my own? This is a frequent question from new programmers. I wrote a post in 2020 about this. Below is a reproduction of my post. It was [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1],"tags":[40,39,41],"class_list":["post-140","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-mysql","tag-php","tag-programming"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/pawgV7-2g","jetpack-related-posts":[],"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/karwin.com\/blog\/index.php\/wp-json\/wp\/v2\/posts\/140","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/karwin.com\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/karwin.com\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/karwin.com\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/karwin.com\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=140"}],"version-history":[{"count":0,"href":"https:\/\/karwin.com\/blog\/index.php\/wp-json\/wp\/v2\/posts\/140\/revisions"}],"wp:attachment":[{"href":"https:\/\/karwin.com\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=140"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/karwin.com\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=140"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/karwin.com\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=140"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}