So what's the deal and what do I need to be a professional in this field?
About Wordpress, phpBB, and other premade solutions
First off, if you can use an existing project to do your website, use them. There are a billion reasons to do it, I
wrote about it before.
Obviously, it won't hurt to know how to build your website from scratch, even though in practice very few people still do that. A good compromise (and very common solution) is to use what we call
Web Frameworks. It's just a bunch of libraries and functions you can use in your code, covering the most common actions you'll need when working on a website. For example:
- CRUD operations for your databases.
- Generating HTML forms and sanitizing input
- General security good practice, like the CSRF token
- Performance tricks, like caching
- A templating model (but you already get this for free when using PHP. That's not true for all other languages).
The list goes on, and depends on the framework you decide to use. Here are the most famous ones you can find in PHP:
The upside is that you will learn a lot about web development in general by studying how these frameworks work.
About Dreamweaver
Don't use it. If you use it you will never bother learning. If you learn, you will never feel the need for it.
About PHP
PHP as a language has some serious advantages, usually linked to its huge popularity:
- You can find a job easily
- You can find professional hosting and other tooling very easily
- It's a templating language which makes it wonderful for web development
But the truth is, you'll suffer a lot in your carreer if you limit yourself to a single programming language. If you want to be competitive in the field, you should learn a few other languages.
These languages will be very useful if you want to find work in web dev:
- Java and the JEE platform
- C# and the .NET platform
- Python (my own personal favorite, it's such an elegant language)
- Ruby
There are other languages you could learn that will make you a better programmer even if you never use them professionally a single day in your life, some examples:
- C (and to a large extent C++) will teach you about how computers work
- Haskell will teach you a complete new way to reason about your programs
- Lisp is a language to create languages. It will change the way you program forever
Each of these languages will present you with several web frameworks. Again, here's an opportunity to learn so much about the field!
About being a beginner
Unless you've been programming for the past 30 years and/or have worked on a website with over 30 million page views per month, you're a beginner. The field is so vast, complex and ever changing that the second you think you have nothing to learn, you're outdated. As a matter of facts, the more you'll learn, the more you'll realize how much you don't know. The simple act of opening the Google homepage in your browser is an action that's hiding
such a complex mechanism, it'll make your head spin.
Most of the problems we deal with when programming have to do with managing complexity, whether this complexity is about too many features in a single website, too many visitors making your website slow, too many programmers working on the website at once, too many things affecting your website and giving you headaches.
We already mentioned learning new programming languages, here are a few things you can do to start practicing "real world programming". There are thousands of other suggestions:
- Learn advanced JavaScript. JavaScript is arguably the biggest game changer in the web programming field today. It's not a cute language to make animations anymore, but really a language to have apps running in your browser. Learn a few frameworks (I recommend AngularJS) and try to reimplement a large app, like Gmail.
- Learn more about HTTP. Learn how to configure popular http servers (like Apache or nginx). Write your own simple Http server for fun.
- Learn more about the system you're using. If you're on Windows learn everything you can about Windows. Install linux. Learn to deploy your website on a Linux VM. Then learn to deploy your app on the Internet yourself.
- Learn more about source control. If you want to learn only one, learn Git. If you ever plan on collaborating with other developers on a single website, this is by far the most important one. There's nothing more annoying that a programmer who doesn't know how to save her code and share it with others. Unfortunately, it's far too common.
- Learn more about the Internet and how it works. Learn what's IP, TCP, UDP, DNS, DHCP, NAT, and all the other technology that make Internet what it is.
- Learn more about the Cloud. Learn to use different models, like PaaS (example Heroku or Google App Engine) or like IaaS (example Amazon Web Services, OpenStack or Google Compute Engine). Webapps developers who know how to take advantage of the cloud will be ahead of their competition in the near future.
- Learn what's an API and use a few of them in your website. You could start trying the Twitter API or the Google Maps API. Learn to write your own API so that your visitors can interact with your website programatically. Right now, this is the one I personally struggle with the most. Elegant API design is insanely difficult. I found REST to be a great guideline, but it doesn't solve everything.
- Learn that your visitors might not be accessing your website from a PC, but from any kind of device. Learn about Responsive design and mobile apps development.
- Learn the basics of security. What are the common attacks your website will endure, and how to resist them?
- Learn the importance of testing, and how to write good tests. It's unfortunately too common for projects too be badly tested. A good QA engineer can improve the quality of your website by several orders of magnitude. Learn what's Continuous Integration as well as its little cousin Continuous Delivery. Learn to configure Jenkins and/or Travis.
- Learn about advanced programming concepts like lazy evaluation, concurrent programming, caching, meta-programming, ... They will be extremely useful for managing complexity. (Note: PHP is not really the best language to practice these)
Conclusion
I know this may seem like a lot. It would take several months, if not years to barely scratch the surface of each of these topics. And even then, you wouldn't have seen most of what our field is about. It's common for newcomers who make their first website to get the feeling that they got everything figured out. It's easy to think that our whole field is reduced to something like Worpdress. As I said before, what we do is
extremely complex, and we make
extreme efforts to make it look simple. It's also changing constantly. If you want to remain competitive and relevant in the field 20 years down the road, start learning all these topics :)