thomblake comments on (Virtual) Employment Open Thread - Less Wrong
You are viewing a comment permalink. View the original post to see all comments and the full post content.
You are viewing a comment permalink. View the original post to see all comments and the full post content.
Comments (276)
It really depends on what someone needs you to do. There are a few different approaches to web programming, which include different workflows and different ways of breaking up who does what. Generally, most things on the web can be broken up into "front end" and "back end", which change meaning based on context. "Front end" can usually be divided into "design" and "implementation [or] programming". "Back end" can usually be divided into server administration, the database, and programming.
I work at a small firm (in person) and so do both front-end and back-end programming, but usually someone will specialize in one or the other or some aspect of it. For folks condemned to work in the world of Microsoft, there is usually a lot of complicated technical work to interface various proprietary Microsoft technologies using abstract frameworks on the back end.
The traditional back-end setup in the Unix world is what used to be called LAMP (back when people felt the need to call it something) - a machine with a Linux OS running the Apache web server and MySQL database engine, with Perl (/PHP/etc) serving up dynamic pages.
On the front end, you basically have a web page crafted using HTML (usually served via some complicated method from the back end) as well as whatever the user-agent is going to let you get away with. In practice, depending on the application, you will use HTML for the page's semantic structure, CSS for style and layout of the HTML, and Javascript for dynamic content on the front end, often employing a library like JQuery to abstract away browser quirks or JQuery-ui to add user-interface functionality. Plugins like Flash might also be used to create dynamic content with a more consistent user experience.
It's really impossible to prepare ahead of time for whatever web development job someone might need done, and there are gurus who are experts at any particular one of the technologies above, so it's a little tricky to set out trying to find a niche to fit yourself into. I can do anything we randomly decide to get involved in at my job, but I still don't fit the bill for a lot of the job postings out there because I have no reason to study the technologies used on Microsoft servers, and I hardly ever use Flash since Javascript is actually almost as useful these days, and we've never seen a reason to work seriously with Ruby or Python since they do so miserably in benchmarks against our old standby Perl (or C if we really need performance) and we're not popping out unique web apps on a daily basis that would need a complicated framework (like Ruby on Rails) to abstract away a lot of the work at the expense of performance.
The real trick is staying good at web development. Aside from graphics and games, the web is the main computing frontier where things are constantly changing and improving so constant study and practice is needed to stay ahead of the curve.
I'm pretty confused about back end programming. I figured it was possible to just let other people handle that for you, like Heroku or some other hosting service where you don't have to worry... but I'm totally in over my head here, is that not how that works? I guess if I got into web programming I'd want to focus as much as possible on the front end, designing things and trying to worry as little as possible about optimizing data structures and the like.
Back end programming just means the programming of what you want your site to actually do, as opposed to how you want it to look. i.e. it's the part that actually qualifies as "programming" (coders really hate it when web designers refer to web design as "programming").
If you're just setting up a web site based on an existing code base (like how LW is based on the reddit code), then there may not be any back end programming that needs to be done. But if you're actually creating something original, somebody needs to actually write the code to make it do what you want it to do.
Like say we were trying to create LW from scratch. You've laid out all your HTML and CSS and images and whatnot for how you want everything to LOOK. But there are all these buttons and stuff, like the "Create New Article" button in the top right. You can lay out where that button is and what it looks like, but what actually happens when a user clicks on it? That's where back end programming comes in - probably you respond to the click by creating a new row in an article table in your database, which has a schema you've created, specifying all the fields that need to appear - the article content, the article author, timestamp, maybe the article karma would get stored there too. Then it generates from that a stub article which it passes back to the frontend which then decorates it and renders it for the user.
And then of course there would have to be code written to handle commenting and the karma system. Those would probably be stored in their own db tables with their own schemas you've designed, and you'd have to write the code that takes a user action, like clicking "comment' or "vote up" and actually doing something with that, incrementing the comment's karma count by one and storing that back to the database.....
...thats's back end programming. And as you can see, its definitely not something a hosting provider could just do for you, cause it's very specific to your site and what exactly you want your site to do.
Sorry for being rambly and incoherent.... i took an ambien about a half hour ago and am in that ambien half asleep/half awake/half stoned state
Thanks, I'm significantly less confused now, and back end programming now sounds like fun.
It's a lot of fun. Now you're making me whimsical! ;)
Hmuh, this is intimidating. I was gonna pick up some PHP but to actually use it for a project I'll need MySQL and for that I'll need to set up an Apache web server of some kind... which is intimidating, and I'm probably approaching this the wrong way, especially as I'm not sure yet what I'd even be scripting for. Also I feel alienated as a Windows user; I have Ubuntu but it's frickin' annoying sometimes. How do most people get started with this whole hacker thing?
EDIT: Eff it, I'll switch to Linux and play with Django, it seems easiest. Stupid Linux.
There is essentially no reason to bother with PHP these days. It's a relic and you'd end up having to learn all sorts of arbitrary distracting things.
I can empathise with the intimidation. There was a whole heap of linux administration stuff that I had to pick up to get started. Fortunately, you don't need to do anything like that any more and it can be even easier on windows! You can install the whole stack (ie. Ruby, Rails, apache and mysql) all at once. From there you can just find a tutorial to follow then start copy and pasting stuff from similar applications till you have one that does what you want. (You didn't hear 'develop by cut and paste and google' from me! ;))
RubyStack is one option. The one I have used is InstantRails. I think that one is getting out of date (about a year old) but it probably doesn't make any difference for your purposes.
I don't know what the options are for other web development frameworks. I'm sure there is something simple out there for Python somewhere but I just haven't had reason to look into it.
So if you wanted to get started it is easy enough. Depends on your interest.
When I have something I want to do I go do it. Sometimes that means learning stuff like programming. Sometimes it means learning pharmacology. That's probably the underlying spirit behind the 'hacker' mindset.
I rather like PHP. Examples of "arbitrary distracting things"?
Thanks! Ruby looks good, but I know more Python/Django folk, so it's tempting to leave Windows for a bit. I guess I'll start with the RubyStack and see what I can build. I'm guessing a lot of the basic skills I need are transferable to Django development anyway.
I wonder if there is a "DjangoStack" for windows about someplace. Maybe your friends would know? Not that I'm saying linux is bad, just that you've already got enough stuff to be absorbing without cramming in two languages and frameworks at once. (But you are right, the fundamental concepts are the same.)
I downloaded RubyStack and the install process doesn't do anything; not sure why. It flashes a BitNami logo and then goes blank, but the process is still sitting there in my task manager... maybe it doesn't play nice with 64 bit Windows 7. At any rate BitNami also has a DjangoStack! So I'll try that instead. :/
...and that also didn't work, so it looks like Ubuntu for me, where my problems will be even greater. I hate computers.
I am not a web developer, but as a Linux user of 15 years let me explain why it might not be as bad as you think.
Get any old computer and put Linux, Apache, MySQL on it. (Those softwares require very little in the way of hardware resources unless you are serving 100s or simultaneous users.) Network the Linux machine with your Windows machine. Even better if your Windows machine has enough memory, run Linux on a virtual machine on Windows. I do not know what the cool kids are using these days in the way of virtualization software, but VMWare would work.
Use a web browser on Windows to test your web app of course.
Editing of text files (mostly config file for Apache, etc) on the Linux box or Linux virtual machine can probably be done using whatever text editor you already use on Windows though I do not know the details of how to set that up in any editor other than Emacs. (For Emacs I would probably use the FTP protocol. The SMB and NFS protocols are alternatives.)
True, you will probably need to interact with a shell on the Linux box or the Linux virtual machine occasionally (using something like PuTTY on Windows), but this way saves you the trouble of having to learn anything about Linux's graphical user interfaces. The good thing about the shell is that it lends itself very well to textual tutorials, with the result that there are 10s of 1000s of blog posts and web pages describing in exact detail how to do stuff in the shell. I would be happy to answer questions by email about the shell, but I do not know about Apache or MySQL.
This way of working with Linux -- by establishing connections to it with browsers, text editors, FTP clients and ssh clients like PuTTY on Windows is very common.
Everything I have described is the worst-case scenario. You can probably either install Apache, MySQL, etc on Windows like wedrifid says or avail yourself of some online service that will host the software for you and allow you to configure and administer it using a web interface.
What Microsoft is actually good at is linking front and back end. People can pretty much take the mouse, pull an SQL table on a website and have all the CRUD generated for them and it works. The open source / linux world with its strong focus on the separation of concerns and modular architecture is very good for the kind of projects where you want to build with scalability in mind and you don't mind not getting immediate results.
Microsoft (ASP.NET and many other products) is for a different philosophy or situation. For example you work at a business where the boss figures out it would be good if we would have a central database of ours customer contacts instead of salespeople just keeping business cards of their contacts in their briefcases and phones. But it is not good to put it into the accounting software because that is desktop based and besides you don't want to buy expensive licences for the salesies. So you volunteer to solve it even though you never even saw ASP.NET, but you watch an 1 hour tutorial, make that one table, pull that on the website, sort out the authentication, and you have an application. Then as the new and new requests keep rolling you keep googling and learning how to do them. In two years you are an expert in ASP.NET and you have a complicated app with 100 tables. (And usually an utter mess and you probably will need to make up a bullshit excuse to be allowed to rewrite clean.)
So... Microsoft is for the cases when you want something immediately useful, and then it will just grow organically out of it, and you learn while doing it. Open source is when you already know how to, you have a project with plans and designs, and you don't need something immediately useful.