12

I know that may sound a little vague, so I'll try and explain a little further...

After being self employed developer for many years I'm now in search of a commercial web developer role. My only experience with servers and hosting is uploading through FTP and playing around with CPanel/WHM a little. The role's I'm going for are web development PHP, MySQL, HTML, CSS type roles, but in recent interviews I've been asked questions about setting up things on the server, that I had no idea what was being said... which wasn't ideal!

Without knowing more than I do, it's hard to explain what exactly I'm looking to learn, but it's basically just the server elements I should know as a web developer? If you're a web developer, do you have any dealing with the server apart from uploading files, and if so, what? Are things like Subversion(SVN) and version control systems often set up by the web development team, could that be what they were talking about?

closed as too broad by gnat, Dan Pichelman, GlenH7, user40980, Kilian Foth Oct 21 '13 at 7:17

Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.

  • 2
    possible duplicate of What should every programmer know about web development? – Dan Pichelman Oct 18 '13 at 13:20
  • 3
    I think this one is more specific about servers though :) – Michael Durrant Oct 18 '13 at 14:37
  • 2
    I hate to break it to you, but if you can't configure a web server you're not a very valuable web developer and it's not something you can quickly learn in a book. Rather than do a half ass job at learning server components from a book. You're better off to perfect your PHP skills and apply as a PHP programmer. – Reactgular Oct 18 '13 at 15:27
  • @MathewFoscarini because I'm no good at it I should avoid it and perfect only what I know? Wouldn't this advice cause the world to grind to a halt? not a very valuable web developer is what I'm trying to overcome, so I'm happy to learn about it properly, I just don't know how best to go about this learning, and which areas to focus on first. – john Oct 18 '13 at 17:40
  • @john You did ask in the context of being hired as a web developer. Something you're not qualified for. If that's what you want to get hired as, then by all means go for it but don't expect a short term solution to answering questions in an interview. I would expect that the employer is attempting to weed out candidates who don't have practical career experience working on servers. My impression from your question was you're trying to get a job doing what you couldn't do as a freelancer. You could try finding a client willing to pay as you learn these server skills. – Reactgular Oct 18 '13 at 18:54
10

This is a big set of questions, but I suspect one that a lot of folks need to address, particularly as they start to advance in a career that started with a heavy front-end focus.

You mention that you are going for a role that includes PHP and MySQL development. These are things that need to execute on the server. Being able to make good technical judgments as a developer requires that you gain an understanding of how these things work on the server and how they interact with the web front-end. So, you clearly need to develop an understanding of the server.

Rather than trying to figure out up front the exact body of knowledge that you might need about the server, I would recommend diving in and building something including installing all of the server side software yourself. A great way to get your feet wet is to install Linux on your computer. You can use something like VirtualBox to let it run alongside your current OS. Install MySQL, install and set up the server for PHP and try to get everything working together. The great thing is, these days, a moderately well equipped laptop can run all of this and be the "server". This could be tough at the beginning, particularly if you don't have experience using Linux and the command line. As a developer, you should at least know enough to be able to get through this exercise and it will give you a jump start in figuring out how to further your knowledge.

There are three areas where you will probably need to get up to speed:

  1. The basics of the Linux operating system. Maybe start with an easy to install distribution like Ubuntu.
  2. Setting up a web server and PHP. Installing Apache is a good place to start. There are other alternatives, but this is where most people start.
  3. Learning the basics of installing and running MySQL. At the very least, as a developer, you will probably need to be able to write DDL to create tables and other structures in the database and you will definitely need to be able to query the database on the server to explore data and ensure what your application is spitting out matches what is in the database.

If you were to go with Ubuntu, you could follow the basic instructions here to get yourself up and running. Note, you will have to do quite a bit of ramp up on Linux basics before starting to install and play with the web servers/database components.

In terms of how developers need to interact with the server, beyond uploading files, I think this varies a lot from organization to organization.

  1. The developers are often dealing with the administration of at least the development environment. Sometimes, it is developers who are setting up the revision control system (for example SVN) and the deployment process (moving code across environments).
  2. To your point, at the very least developers will need to use revision control system that is living on the server.
  3. You will also need to do things like look at the logs on a server to see what messages are being generated to help diagnose and resolve problems.
  4. You may need to work with an infrastructure team to determine things like the network configuration or storage configuration of the server. Often, application issues are a combination of the configuration and the code.

The point is that there is not a single answer for exactly how you will need to touch the server, but in the course of your career, it will certainly go beyond just uploading files via something like FTP. Getting started by learning the basics now will help.

  • Great answer, thanks! So when I'm setting up 'Mamp' for local work, is that the same but without access to the outside world? I've installed a few Linux OS's and know a little command line stuff but nothing I'd remember easily. My knowledge of servers is non-existent, but I always think of them as being accessed by command line only, and not like a user friendly OS, is that the case? – john Oct 18 '13 at 15:03
  • 2
    It's best to be comfortable using the command line. Most 'real' web servers you'll deal with will be remote machines, and wont have GUI's installed. – GrandmasterB Oct 18 '13 at 15:27
  • 2
    As @GrandmasterB wrote, it is useful to get hands on with the command line. In my opinion, Linux is a good learning platform is because it forces you to get "close to the metal" in learning about what the OS is doing beyond what you see on the screen. Look at the httpd.conf file, understand what the web server is actually doing and how the PHP module integrates to it. Get a foundational understanding of the platform and it will make you a better developer. – DemetriKots Oct 18 '13 at 18:24
  • I switched from linux to Windows servers a few years ago, and never looked back. Linux is great and powerful but you have to go with the tools that best fit the requirements of the job. – Reactgular Oct 18 '13 at 19:01
2

My first point of advice is to not exclusively limit yourself to any one role. It's great to be a specialist and have a deep knowledge in a particular skill set (PHP, for instance). However, it is just as important to have a broad knowledge that spans across the rest of your domain.

In my experience most teams are not looking to hire someone that has the knowledge to rewrite the core functionality of PHP, but rather someone that can handle any problem that is thrown at them (although having that level of knowledge would certainly not hurt). Or at least someone that can help solve any issues that the team encounters. For instance, imagine a situation where your application goes down and customers are being affected. You can either throw your hands up and say "I have no idea what to do..." or you can SSH into the server, start scanning logs, notice that the diskspace of a particular filesystem is full and proceed to clean it out. This is a minor example but I think the point is clear. With that basic knowledge, as a developer, you could write a script that monitors that particular filesystem and cleans it out once it reaches a certain threshold. You have now become that much more valuable to your manager.

Another thing I have learned during my career, is that things move fast, and if you don't keep up you are going to be left behind. The more you know about your entire environment (including the business aspects) the better off you are. That's not to say you need to be an expert in everything you do, but at least have the knowledge to not be labeled as clueless. The more familiar you are, the more adaptable you are, and the more valuable an asset you are to your company.

To specifically answer your questions...

  • What server elements should I know as a developer?

Be familiar with the entire application stack. Know what web server, database, caching mechanisms, etc. that are being used. And which versions, too. Have enough familiarity that you can recreate the environment on your own server. Which, in and of itself, is vitaly important. You should strive to more or less have the same environments in development and production, as it reduces surprises (http://12factor.net/dev-prod-parity).

  • As a developer what dealings do you have with the server?

This really depends on the team. In my particular case, the developers play a huge role in staging the environments. We are the most familiar with the inner workings of the application and so are in the best position to determine what server technologies are in place to run it. I imagine not all teams have such a hands on approach, but to have enough familiarity to be able to involve yourself in the discussions is a great advantage. Specifically, in regards to version control, you as the developer are highly affected by which technology is chosen (Git, Subversion, Mercurial, etc.), and therefore should strive to involve yourself in the decision process.

So, now what?

As for my suggestion as to how best to approach learning all of this? Move your feet. Don't worry about trying to read everything you can on the subject, most of it will probably just leak out of your brain by the time you are finished. Instead start developing something from the ground up. Start with Vagrant; it will allow you to easily create and manage a virtual machine that you can use as your new playground. Then, install a web server and a database and start creating. If you have an idea for an app, perfect, go for it... if not, find a tutorial or try to recreate an existing app. The point is just to become familiar with the entire process. Also, as a PHP developer, be sure to check out PHP: The Right Way... it really contains a lot of excellent info. And most importantly, don't stress yourself out. I imagine you followed the path of a developer because it's something you enjoy and are passionate about... don't lose sight of that!

1

Focusing on What do you need to know about servers to be a web developer?...

Actually surprisingly little. Your main areas of knowledge should be programming, html, php, etc.

What you to need to know is how to run things locally and when you do this you are using your box as a 'server'. So when running locally you use a web browser to view the pages, just as with any internet site... except yours will be http://localhost or http://127.0.0.1

As for configuring cgi, http, etc. I don't expect you need to know that. You can always work through any general book on setting up a web server for the OS you work in and that would be enough coverage to know the general terms.

For the bigger picture I recommend getting into Linux and learning how to set up and configure machines such as web servers. But only if you actually have an interest in the stuff. Not just to impress in interviews.

Finally I would recommend you consider making notes during interviews about areas you don't know enough about. It would help if your question was more specific about just which terms, etc. you didn't know.

  • Thanks. I'd like to learn anyway if time permits. Would a 'linux for dummies' type book help me here. I'll be moving host shortly, is Amazon AWS cloud hosting something that would benefit me with a little work, or is it completely different? – john Oct 18 '13 at 15:11
  • 1
    I wouldn't use a dummies book. Much of may not be relevant. I'd try skimming something like Administrating Web Servers, e.g. cengagebrain.com/shop/en/US/storefront/… – Michael Durrant Oct 18 '13 at 18:15
  • yes, run linux as your devlopment machine, and set up a web server on it. Get used to playing with it and configuring it. You will learn enough that way. Thats basically how you learn on the job. Half the stuff is under sysadmins control, which can be good to begin with,but as you advance, you will prefer to be given more conrtol of the setup yourself. – wobbily_col Oct 21 '13 at 21:45
0

You need to know below things to complete the web development cycle.

1) IDE (Netbeans and Eclipse etc.)

2) Any programing language for coding. (PHP, java, etc. )

3) Front technology for page designing (HTML, CSS etc.)

4) Backed database to store and retrieve data. (MySQL etc)

3) Version controlling system for checking and retrieve you code form repository.

4) build tool to compile you code with dependent files. (Ant, Maven)

6) Web server to deploy and run you code.

7) Need to know basic deployment process over servers to run and test you web and ejb component. (Tomcat, Web-Logic server)

0

In addition to DemetriKots answer, I'd also add looking at solutions for automated deployment and continuous integration. Setting up the server initially is only one step, and deploying over FTP is painful and error prone, with no proper solution for rolling back bad deploys.

  • Hudson - Continuous integration server
  • Phing - automated build tool, specifically for PHP, based on Ant
  • Ant - automated build tool
  • Capistrano - create deployment scripts to automate and ease deploying your web application.

Not the answer you're looking for? Browse other questions tagged or ask your own question.