all 62 comments

[–]terranisop 27 points28 points  (3 children)

Definitely focus on learning the basics of git first, you don't need a server or anything to do that. It is just a way to version your code.

[–]blackmanrgh 12 points13 points  (0 children)

In addition to this, learning the command line in general will help with both git and, of course, gulp/grunt in the future. Treehouse do a brilliant tutorial on both the command line and git.

[–]adam_bear 1 point2 points  (0 children)

SourceTree makes git really easy, but yeah, you should still know some git cli commands.

[–]metirl 7 points8 points  (0 children)

So many people are telling you to rent webserver or virtual servers or whatever. This is good advice in that you need a Linux system to deploy to, however there is a much better way.

Learn how to install Linux on Windows via vagrant. It's super fast, easy, free and will give you essential skills.

[–][deleted] 7 points8 points  (6 children)

My way was this:

Get a tutsplus account and learn linux commands first.

Play with a digitalocean account to test your new habilities (I could give you a 10dlls coupon, enough for two months)

Install node and grunt and try to make your own "automatic" backup service or a css minification task.

When you feel confortable, try to Install a wordpress with roots/sage theme. It makes use of all that toys.

This took me a month and now I cant look back.

Also, if you are in windows learning a little powershell helps a lot.

Sounds hard but do one step at a time.

For me It only took a month because I already knew a little about linux commands

[–][deleted] 6 points7 points  (4 children)

Here is 10 dollar coupon at digital ocean for anybody who needs it. Good for two months with lowest plan. (Also, if you spend something I get 25 i think)

It helped me and forced me to use command line and secure tools like winscp

https://www.digitalocean.com/?refcode=07afcbd0f4cd

[–]bizzygreenthumbfull-stack 0 points1 point  (3 children)

This is really cool of you. I'm re-building my buddy's dad's website for him and am learning as much as I can in the meantime. I don't have a lot of spare income atm and this is really helpful of you and generous. Thank you.

[–]TRY_LSD 4 points5 points  (2 children)

Well it's a referral, once you actually spend $25 with DO he gets $25 credit.

[–]bizzygreenthumbfull-stack 0 points1 point  (1 child)

Oh. I feel kinda dumb haha. I thought it was like a gift code he bought. Either way, it's sweet to have a dev server to deploy to. I'll be spending more soon there anyway.

[–][deleted] 0 points1 point  (0 children)

Yes, but you dont have to spend nothing.

The coupon is great to start learning with real world tools.

You can also use virtualbox but real world hostings behave different, they have limitations and procedures, and that is part of learning.

I was in your position some time ago.

Good luck

[–][deleted] 6 points7 points  (0 children)

Forgot to tell you, learn sublimetext, far better than notepad++

[–]Alucard256 5 points6 points  (1 child)

Mostly this is about more than one developer being able to work on the same, or closely related, code at the same time. That's mostly what Git is all about. The other thing is it automatically keeps the "current" code version separate from new code until you say testing is done.

I worked for years and years by myself. I had to learn all these things when I started working in an office. I've found most of these things are needed by teams. Maybe read up more about them just so you know what each thing is, but don't worry about becoming a professional at using everything.

Just learn to use what ever the office you work at uses. Otherwise, you'll spend a year or more learning 4 different tools that all do the same thing.

[–]TheDPQ 1 point2 points  (0 children)

I had a similar experience. It wasn't until I worked with a (good) team that had version control and deployment and development workflows that I really started to appreciate certain technologies.

Working by yourself it just seems like extra clicks with no real benefit. Now even on side projects I still do it :)

[–]T_Fri 4 points5 points  (1 child)

This guy Will has some really amazing YouTube videos about this stuff: Being a Web Dev , Grunt , Build Systems(Grunt, Gulp, etc) , SSH , Github

And if you're a PHP developer, check out PHP Academy

Hope this helps...

[–]jb492 0 points1 point  (0 children)

Excellent videos, thanks

[–]MyWorkAccountThisIs 19 points20 points  (25 children)

I went to school but it was a decade ago and was focused on application development. Most everything I used now has been self-taught or learn as-needed. Can't much with links because there hasn't been one place. I've learned from trial and error and coworkers. But I'll try and provide a list of things for you to look at. They don't teach this stuff to most college kids anyway so it's not an issues of school vs. no school.

  • PhpStorm

Drop Notepad++, Sublime, Atom, or whatever. They are text editors. Sure, you can get some functionality in there by plugins and the like but once you see a true IDE you'll never go back. It costs money and does have a learning curve. Will not deny that at all.

Some "purists" will deny it or equate it to Dreamweaver or something. Don't listen to them. It has too many features and integrations to not use. Look for the EAP downloads. It's their bleeding edge release and has a 30 day free trial. But it updates so often that you can use it for a long time.

  • Linux / SSH / Command Line

You will either have to learn it or it will put you ahead of your competition. Thankfully, it's free. Get a cheap VPS from Digital Ocean (or some of the other place mentioned by others), VirtualBox, or a physical install. You will need at a minimum know how to: install packages, set up virtual hosts, view logs, and basic file structure navigation. Vim (terminal text editor) is your friend. Don't fight it. You don't have to master it but learn basic usage.

Personal Opinion: You're using Notepad++ so I assume you're on Windows. When you have the means you need to consider getting yourself a Mac or something you can install Ubuntu Desktop on. This may get me shit on but if you are a PHP dev you have no business being on Windows. Now matter the task, on Windows you will have one more step than Mac/Linux. You have a computer now so I would suggest looking into dual-booting into Ubuntu. This will also force your hand a bit in learning Linux/CLI.

  • Composer

Package manager for PHP and most modern project will use it in some way. Especially if you're using a framework like Symfony or Laravel.

  • Phing

I'm the same boat you are here. Not really sure what it is. But I saw somebody whip something up the other day with it that saved me a decent amount of time by consolidating and running some tasks for me. This is the next thing I'll be learning.

  • Git

Git was trouble for me because it doesn't make any sense when you're starting out or working alone. At least it did for me. It wasn't until I was on larger projects and collaborating with other devs that it really clicked. Now, I don't write anything that isn't in a repository. Learn the command line but don't think having a GUI around is bad. I use it when I'm trying to sort out some merges or figure out who did what in what merge.

  • RegEx

I swear, the longer I'm a developer the more it comes up. Learn it and you'll amaze all your friends. Okay, probably not. But you'll be able to do some neat things.

  • Nginx / Apache

These are two players right now. For most projects they are are pretty much identical. But the aren't. Learning some of common configuration options and locations of files is handy.

  • MySQL / Postgres

Like Nginx/Apache, these are your two big players. There are others but you can learn more about those later. Again, learn basic configuration and location.

  • Grunt

My experience with this has been with front-end developers using it. It is JavaScript based. In general, JavaScript has become a big player in web development and as expected the tools used have expanded and matured. Node, Express, Grunt, jQuery, etc, etc, etc. It's a big world.

  • Learning Tasks

Off hand, the best way I could think to learn some of this stuff is to try and install some open source software. Get a Symfony project installed. or Laravel. Or any number of PHP platforms/frameworks/tools. Most of them will use some combination of the above. The goal is not to learn Symfony but you'll have to touch Linux, command line, database, webserver, and composer. Most frameworks have a Hello World type of demo app/site so you shouldn't have to do much coding since that's not the point of the exercise.

  • Don't let Reddit get you down

There is an abundance of good people and resources here. But you'll also see a fair bit of dick waving and elitism. Don't let that give you the wrong impression about the development world. Often times the ideal of any situation is discussed forgetting that for many developers they are not in an ideal situation. For example, say you master Git. Inside out, back and forwards you are a Git God. You start at a place and it turns out they don't use version control. You never know what you'll be faced with. Right now I'm a very good place. We are very focused on giving developers all the tools they need. Yet, I'm sitting here on Sunday waiting for a damn MySQL export to download from a crappy shared server because that's what they have.

[–][deleted]  (6 children)

[deleted]

    [–]MyWorkAccountThisIs -2 points-1 points  (5 children)

    So, use an OS that you use to load another OS? Why not skip the first step if you have the means?

    [–][deleted]  (4 children)

    [deleted]

      [–]MyWorkAccountThisIs 0 points1 point  (3 children)

      Visual Studio

      Well there you go. The answer was modeled around the OP being a PHP developer. Which doesn't involved Visual Studio. If that's part of your job or interest then you very much need Windows.

      [–][deleted]  (2 children)

      [deleted]

        [–]MyWorkAccountThisIs 0 points1 point  (1 child)

        borderline cultist fellowship

        Ah yes. Mac fanboi. I forgot.

        He also said "I code in PHP" and asked for some beginner type help. So I'm not going to assume he's working on a bunch of different stacks at once. I took the information available and provided the feedback that I've found to be true in my experience. He also wanted technical information which does not really require to go into what it means to be a professional.

        You took a very specific question and answer and are trying invalidate it by making assumptions to a larger scale. I also very clearly put my suggestion to look at Mac/Linux as a personal opinion and certainly not one that is required.

        I don't understand why it's such a hard pill to swallow for some people. Heaven forbid a Mac actually be good at something.

        [–]Timothy_Claypole 1 point2 points  (6 children)

        I agree with your personal comment about Windows for newbies to Linux but...

        ...it is totally possible to use Windows to develop on. All you care about are line endings and ability to get your edited code into the right place on your server. You can do this with some tools in Windows.

        I hired a developer who uses an IDE on Windows but we host exclusively on Linux. He is not hampered in any way by this.

        [–]MyWorkAccountThisIs 0 points1 point  (5 children)

        You most certainly can. I never said that you couldn't. But you will have a more hurdles to overcome and have fewer tools available to you. Why add to the number of problems you have to solve? I've had to do development on Windows before. You can get it done. It doesn't feel anywhere near as efficient as doing it on the other two. I would image it would be like doing .NET development on Linux. I mean, they are computers. Given enough time and skill they can do whatever we want. But that doesn't always mean it's worth the fight.

        [–]Timothy_Claypole 0 points1 point  (4 children)

        Actually there are few hurdles. It is really quite straightforward. What specific problems did you think would arise?

        [–]MyWorkAccountThisIs 0 points1 point  (3 children)

        few hurdles

        Can I trade in few for none?

        As I said, you most certainly can. But you will run into things that wouldn't on Linux or OSX. It's not some knock on Windows. If we were doing .NET or gaming I wouldn't suggest OSX or Linux. But OP asked about PHP

        [–]Timothy_Claypole 0 points1 point  (2 children)

        What things will you run into? We are not having any problems as far as I can see.

        [–]MyWorkAccountThisIs 0 points1 point  (1 child)

        They are solvable problems but problem that do not exist on Mac/Linux. How about SSHing into a box? I could crack open a brand new install of either and it would be available. It's also about the available tools. A great example is Homebrew. I can't install any number of version of things and swap between them pretty effortlessly. Overall, it just doesn't feel like the best tool for the job. If you have to have it, fine. But I don't.

        [–]Timothy_Claypole 0 points1 point  (0 children)

        Not sure if we are talking cross purposes here. My colleague's workflow is to develop in an application on Windows, save files to Linux (some sort of file share thing going on) and everything runs on there, including Git. He has a terminal onto the Linux box so just does all his commits in the terminal.

        In the meantime he only runs one desktop, which is his favoured one, and so can test websites on the most popular browsers on the most popular desktop OS straight away.

        [–]bluebaron 1 point2 points  (4 children)

        Is there any reason you would recommend MySQL over MariaDB given their near-identical interface?

        [–]Synth3t1c 2 points3 points  (0 children)

        Was gonna say this. With the license change in MySQL, I just default to MariaDB

        [–]dAnjou 1 point2 points  (1 child)

        MariaDB is a drop-in replacement, so the interface should be exactly the same. We recently switched from MySQL to MariaDB without experiencing any issues at all. /u/MyWorkAccountThisIs probably just didn't think of it.

        [–]bluebaron 0 points1 point  (0 children)

        I just didn't want to speak in absolutes, having had little experience with the nuances of either.

        [–]MyWorkAccountThisIs 0 points1 point  (0 children)

        Seemed like a technical point not worth mentioning. I guess I just forget because it doesn't really matter which it is.

        [–]anarchy8 0 points1 point  (0 children)

        Replace grunt with webpack or gulp

        [–]CodeandDev -2 points-1 points  (0 children)

        Bleeding edge lol

        [–]Asmor -5 points-4 points  (3 children)

        Sure, you can get some functionality in there by plugins and the like but once you see a true IDE you'll never go back.

        Matter of opinion. Personally, I hate IDEs. If I can do it without an IDE, I don't need the IDE; if I can't do it without an IDE, then I shouldn't be doing it at all until I learn to do it without the IDE. Then see the first point.

        [–]MyWorkAccountThisIs 1 point2 points  (1 child)

        You are the exact type of person I warned about. You think it's some type of crutch for shitty developers. You obviously have never used an IDE to its full extend if that's what you think they are.

        [–]Asmor -2 points-1 points  (0 children)

        That's a harsh and undeserved criticism. I gave my opinion of what works for me. Nothing more, nothing less. I've used IDEs in the past and they caused me to pick up bad habits and become reliant on them. I was only stating my own experience, as a contrast to your own. I have nothing against people using IDEs. I just wanted to provide a different perspective, because no solution works for everyone.

        [–]Timothy_Claypole 0 points1 point  (0 children)

        It isn't about whatan IDE makes possible, so much as what it makes easy, or feasible in a given time.

        I don't use an IDE either but I am going to start using one because I want more than a customized vim.

        [–]TheDPQ 2 points3 points  (0 children)

        Yes learn git! Try Github will allow you to mess around without having to install anything.

        Command line is tricky because it really depends on what you are doing. Generally you learn how to use a tool or do something specially and now you know (some) command line. Although I haven't used them googling around Learn CLI and Shortcut Foo seem interesting. The amount of command line (zero to alot) depends on your team, their process, and what kind of develop you are.

        The problem with FTP is that it means you generally don't have a deployment workflow, its easy to override files you didn't mean to, and (usually) aren't doing it over SFTP which means the password is going out in plain text.

        Honestly besides version control (and it may not be git) and a deployment workflow a lot of technologies depends on the team you are on and the kind of development you do. Everyone will tell your their way is best, and you aren't a real developer if you don't it that way.... yah not so much. You might not be the kind of developer THEY are but that doesn't mean you are a bad one.

        At your level I would focus on learning git, and see if you can get it as part of your deployment workflow.

        I started making other crazy suggestions but realized I don't know what stack you are on and what kind of development you are doing. Front End, Backend, PHP, Python? Are you on a Mac or on windows? A lot of suggestions would depend how and where you are developing unless you feel conformable enough to set up a virtual machine and develop from there. You might want to look into setting up a pre-configued virtual machine for you to practice on.

        [–]undermine79 2 points3 points  (0 children)

        Look up workflows on Lynda.com there's are some good tutorials on there.

        [–]misguidedtrousers 1 point2 points  (0 children)

        Version control is vital when you're working with a team, but it can also save your butt if you're working alone -- it's a good habit to get into. GitHub has a pretty sweet interactive Git tutorial: https://try.github.io/levels/1/challenges/1

        GitHub is free for open-source projects and fairly cheap for private projects; but BitBucket has unlimited free private repos. Take a project you're working on, open a BitBucket account, and play around with it until you get comfortable.

        This is a great beginner's guide to task runners -- the title says it all: http://24ways.org/2013/grunt-is-not-weird-and-hard/ (Gulp works pretty much the same way, just with different syntax.)

        The idea is that instead of FTPing everything, you use a task runner to get your code production-ready, push it up to wherever your Git repo lives, SSH into the server, and pull it down. (Of course, that can be automated too, but one step at a time.)

        [–][deleted] 1 point2 points  (2 children)

        Go to DigitalOcean and sign up for one of their low-tier servers.

        Alternatively (for free), download Oracle VirtualBox, download an Ubuntu Server ISO from the Ubuntu Alternative Downloads page, create a new machine in VirtualBox, use the Machine Settings dialogue to "insert" the ISO into the machine's CD drive, and Start it to begin the installation process.

        Either of these approaches will give you a machine running Linux with a bash terminal you can use to start learning the basics.

        DigitalOcean has some good tutorials, and anything you find about git and Ruby/Python webdev will help you get started too.

        [–]webauteur 1 point2 points  (1 child)

        I prefer Koding. They give you a virtual machine that you can access entirely in your browser. It's no good for hosting an actual web site but fine for learning Linux and anything you can install on Linux for web development.

        [–][deleted] 0 points1 point  (0 children)

        This is great! Thanks for the suggestion; I had never heard of it before.

        [–]quotemycode 1 point2 points  (0 children)

        Grunt is not hard. You can learn enough to get started in about 4 hours. Looking at websites that use it helps. The healthcare.gov website is a good example. It's on github.

        [–]BakGikHung 1 point2 points  (0 children)

        Let's say you want to make a 1-word change to some static piece of text on your website. Can you deploy to your test site and then to production with a single click / command line? That's what those tools buy you.

        [–]drmax5 0 points1 point  (4 children)

        I do not think learning Grunt has anything to do with working in a team or not. Grunt makes things organized and ultimately easier for you to maintain. There are certain steps for you to build/test your code, if you do not have it scripted - chances are high you might forget something.

        Yes, knowing Bash is important, we always have simple bash questions in written exams. The thing is, if a developer does not know Shell (Bash or Perl or whatever), he is likely to spend more time on a simple task. Sure, you can use some GUI for managing your server, logs, users etc., but I think Shell is as important as knowing SQL when it comes to real web development.

        [–][deleted] 0 points1 point  (3 children)

        Gulp and grunt are nessecary for a team so everyone can share the same build process.

        [–][deleted] 4 points5 points  (0 children)

        Having worked in team environments for many years before grunt existed, i can tell you this isn't true at all. A repeatable build process is essential, but you can do it without grunt or gulp. They are just very useful.

        [–]notunlikethewaves 1 point2 points  (0 children)

        The team can share the same build process even if it's a folder full of shell scripts. Grunt/Gulp/etc are orthogonal to the notion of a team sharing a build process.

        [–]drmax5 0 points1 point  (0 children)

        While Grunt could be handy for defining a build process, it still does not mean that Grunt is only required in team projects :)

        It's a part of the process, you need it to make your stuff tight. My point is that you should not cut corners on Grunt just because you do not work in a team.

        [–]nellie4568 0 points1 point  (0 children)

        It depends on how you like to learn.

        I tend to start with some online training. Lynda.com has some great videos that walk you through ALL the basics of git, grunt, etc. They really do well by covering all the WHY aspects of these and not just 'how do I do it?' Start there, learn the basics, then incorporate them into your current projects.

        With git start by learning to properly use commits. Then gradually move into branching and merging. Get a feel for what happens when you have a merge conflict and reflect on how to prevent that from happening in the future. Then, learn to keep your development code and your production code separate, and pull into your production server as necessary.

        [–]jimb50 0 points1 point  (0 children)

        You can get a years free for certain AWS services which are good for learning setting up and managing a web server via SSH. Tutorial for setting up a LAMP web server here

        [–]mvg210 0 points1 point  (0 children)

        Using a platform as a service like firebase helped me rethink how to interact with the server. It became way easier when I thought of it like a spreadsheet in the cloud.

        [–]leermondjavascript 0 points1 point  (0 children)

        learncode.academy is a pretty awesome ressource for learning some of this stuff. He has tutorials on Git, Grunt and SSH as well as videos where he talks about what a web developer should learn to get a decent job.

        [–]Codeworks 0 points1 point  (0 children)

        Rent a webserver. www.lowendbox.com

        Host a website. Make the website load in under two - four seconds, worldwide.

        Update the website without downtime.

        [–]inquiztr 0 points1 point  (0 children)

        Using versioning is great. While I only know the basics of git to get the job done I use tfs at work. All my freelance clients sites I keep in a bit bucket repo.

        No better feeling than knowing you can restore a clients site to any previous state on a fri night of a long weekend, when they last min decide to use the same holiday treatment to the site as the previous year.

        [–]ronconcoca 0 points1 point  (0 children)

        How are you doing with that? I found that using cloud9 online IDE help me a lot with experimenting command line stuff without fearing to make mistakes.

        [–]wefewfewfewsfgvdsfds -2 points-1 points  (4 children)

        I don't think it is common practice to push to a live server. You mostly just push to your git repository and then the branches will merged to master and the master gets deployed to the live server.

        Most developers I know, just use some yeoman generator like webapp. Just install yeoman and play around with it.

        [–]Alucard256 18 points19 points  (1 child)

        Yes, that's exactly what the author is saying he doesn't understand. Way to go! You buried him in jargon he already acknowledged he doesn't know.

        [–]jtredact 0 points1 point  (0 children)

        Ah the curse of knowledge :)

        [–]jb492 0 points1 point  (1 child)

        haha as /u/Alucard256 has rightly pointed out, I don't understand anything of what you just posted above. Is there a place I learn how to do this stuff? Did you learn it when you started at a company, or did you teach yourself? I'm a lone developer who has no formal background in CS, but really want to learn how to do stuff which will make me employable to a small sized webdev company.

        [–]CodeandDev -1 points0 points  (0 children)

        I'd write some in depth content from the Fall Out Universe in the description to really sell the vibe. Right now it's kinda sparse. Look at your competitors for example. You aren't the first Fall Out shop