DeVliegendeHollander 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.
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.