12 ms·
"Calling oneself a C Programmer is like saying you're a Hammer Carpenter"
- StavrosK 16y agoThat entire comment is very biased. Sure, the "pure" way might be amazing and fantastic, but if I used raw SQL queries for my projects, I'd be in a lot of trouble when I needed to do something extra when saving an object. Sure, I could use stored procedures, but then it's database-specific. What happens when I need to move from MySQL to postgres, or from AppEngine to my own server? The poster just ignores a million things frameworks are good for. Sure, if your project is large enough you'll eventually grow out of them and need to do more complicated stuff than what they make simple, but for 90% of projects they are a godsend.
- billswift 16y agoI think "machinist" is a better analogy than carpenter for programming. A C programmer is like being a lathe operator, a ruby programmer like a milling machine operator, and so on. And the various frameworks and APIs are like jigs and fixtures, they let you turn out some work more quickly and accurately, at the cost of overall flexibility.
- rmjb 16y agoYou're implying that C akin to a lathe and ruby is akin to a milling machine. AFAIK, lathes do come with an optional milling attachment, while milling machines don't have a lathe attachment. Thus C > Ruby ? ;) After a certain point all analogies are flawed.
- vineet7kumar 16y agoSure it's easy to get hurt if you do not use a hammer with care but you just can't be a good carpenter without knowing how to use a hammer properly . NOM
- davidw 16y agoMy inclination is to believe that knowing the basics of writing code with C is slightly more difficult than figuring out the basics of hammer usage. Also, the range of things you can do with C likely exceeds what you generally utilize a given hammer for. Programming languages are not like hand tools.
- deleted 16y ago[deleted]
- kd0amg 16y agoProgramming languages are not like hand tools. Particularly when you consider how much different languages' capabilities overlap.
- Untitled 16y agoI'm going to go off at a tangent here and rant a bit. Firstly, "C" is not a difficult language. When you compare it to the difficulty of say elementary calculus, you will notice that the concepts are simple. Any person who studied computer science and do not know how a pointer works (or how to represent an access an array with a pointer) is grossly incompetent. C does not hide the basic programming concepts behind a nice IDE which you double click to type your portion of code. I recently had another problem (with one person who was busy with a Masters degree at a fairly prestigious technology university). The project involved having video updates. I wrote a demonstration that performed the computation in a “while(1)” loop (i.e. fetch frame, do processing, display frame). The person was involved in writing a simple GUI program. I tried to explain to him that he cannot use a “while (1)” loop in the event handler of the button that should start the event. Even drew nice graphs on a board explaining all about the thread of execution and how event handling usually works (e.g. a loop that handles events and call functions). After 30 minutes of explanation the person came up with a very bright idea. He said that “Maybe we should set a sleep(1000) command in the loop to give the program time to react”. WTF?
- davidw 16y ago> Firstly, "C" is not a difficult language. Compared to other programming languages - most of which are significantly more complex than hammers. My 2 and a half year old daughter knows what a hammer is and has an idea of how to use it. I'm proud that she can point and say "C for cat!", but that's about the extent of her knowledge of the C programming language. Also, yes, C is a fairly simple language, but that doesn't mean that it's necessarily easy to use compared to other languages, that do nice things like GC.
- 16y ago
- xentronium 16y ago"Non-transferable API knowledge" sometimes saves a lot of time you'd otherwise spend debugging your newly invented low-level hexagon-shaped wheel.
- jgrahamc 16y agoAgreed. But the big problem with RoR that I've encountered is that the whole has_and_belongs_to_many mess feels like an idea that got out of hand. You can imagine that with a very simple schema writing the associations would be easy enough, but you end up with two problems: 1. You have to keep the schema and the associations in sync. I simply do not understand why in RoR the associations are not derived from the schema using foreign key relationships. 2. You end up knowing how to do something simply in SQL and then having to translate that on to the Rails way. This Rails way seems like a useless translation of a perfectly workable underlying system. Put 1 and 2 together and I end up with the frustration of "Oh, I have to keep the schema in sync. with all this association stuff so that I can use Rails method to access the schema". It feels circular and I'd be much happier with reverse engineered methods. Also, I find the Rails magic functions where you can just make up a function name find_by_nozzle_color() to be infuriating. I'd be really happy if the reverse engineering component spat out something like a header file containing sensible methods I can call. Perhaps I lack imagination. Or experience. Or both. Also, while I'm moaning. I wish Rails had proper support for database views. It's as if no one has any real experience with databases. Doing that would eliminate a lot of my troubles because I could keep a view (even an updateable view) in the schema and have a handy object accessor for it.
- gaius 16y agoIn all these frameworks, there's probably one guy who learnt a bit of SQL and thought "this is too complicated for anyone but a programming god like me" and built a Rube Goldberg abstraction layer on top of it. There's just no need for an "ORM layer" if you understand that a table is NOT a class and a row is NOT an object, and you can't fake it except by jumping through a lot of entirely unnecessary hoops and what do you get for that? A app that is 1% more "object oriented" than it would have been if you'd just done it.
- llimllib 16y agoCarpentry metaphors for programming continue to suck: news at 11.
- netcan 16y agoNot doing C is like a carpenter not using a hammer? Programming languages are like hammers in that they often end up in metaphors. Hammers are like C in that they are bad metaphors for women.
- llimllib 16y agoBravo.
- vcarefatpeople 16y agoWalking around with a woman looking for a nail.
- kleiba 16y agoI think what the author of the forum posts means is just that it sounds like saying "hammer carpenter" when you say C-progammer, i.e., he argues that it sounds strange to put the name of the tool you use in your job title. I don't think that he's trying to make the analogy "C is to a programmer like a hammer is to a carpenter", because that analogy is obviously flawed (as shown by other comments in this thread).
- AndyKelley 16y agoPeople have said that it is flawed, but they haven't shown that it is flawed. Can you?
- __david__ 16y agoWell, I think the objection is not that C is a tool for programmers like a hammer is a tool for carpenters, but more because a hammer is an indispensable tool for carpenters, but you can do a whole lot of programming without writing in C. If I were to attempt another tortured analogy I'd say C to a programmer is more like a router to a carpenter. You can do a whole lot of carpentry without using a router, but for certain tasks you absolutely need one. Not to mention the blade is sticking out the bottom and totally scary, ready to bite your hand off at the slightest provocation, and the slightest deviation from true carves a big dent in what you were trying to do. Using a router requires a steady hand and some thinking beforehand, but if you know what you are doing you can make short work of many tasks.
- konad 16y agoI, for one, welcome our new Arch Overlord. I kind of agree with him. But I bet he wrapped his "select count(*) from ..." in some sort of function like get_row_count(table). Add a few more and before you know it, you're half way to a new framework that concatentates HTML fragments built from SQL queries.
- gfunk911 16y agoYes, because that's all Rails (and the other frameworks) do. They obsfucate HTML and put a thin wrapper around SQL You always have the option of dropping down into straight HTML. This is one of the things I love about Rails. Also, he forgot all the other things these frameworks handle, which constitute 95% of what they do. Yes, there are people out there who couldn't write straight HTML if they had to, and have never heard of an inner join. We call them bad programmers. Guess what: they're everywhere. EDIT: Obviously this only applies to people who work in web development, or other domains where SQL and HTML are important parts of their domain. If you do low level systems development, write device drivers, do kernel development, etc, you're not a bad programmer cause you don't know HTML.
- RiderOfGiraffes 16y agoYou'd call someone a bad programmer just because they can't write straight HTML? You'd call someone a bad programmer just because they've never dealt with databases? Interesting.
- rue 16y agoWith those actual examples, it would be highly unlikely for them to be good programmers.
- RiderOfGiraffes 16y agoI know, personally, at least 3 exceptionally good programmers who can't write HTML and don't know what an inner-join is. They are gifted at system design and architecture, they write code that's clean, fast, understandable, and has very few bugs, and their code is delivered on time and to spec. But they've never written a web page, never bothered to look behind web pages, and don't know the syntax. I'm sure they'd be great if they chose to learn the syntax, grammar and elements, but they've no need. They certainly know about mathematical logic, and almost certainly know the concept of an inner-join, but they've never dealt with relational databases, and certainly not SQL. I'm pretty sure you can't be a good web developer without being about to write at least a little straight HTML, and without knowing the differences in use and performance of the different types of join, but even then I'm not convinced. Just speaking from my experience. It seems to me that sweeping generalisations such as "Can't write HTML => bad programmer" says more about the speaker than the subject.
- injekt 16y agoI don't get it. Using these frameworks has nothing to do with the user either not being able to write markup, or just generally sucking at doing so. The abstraction isn't 'useless'. It gives you a choice, though. If someone is feeling more comfortable writing raw SQL then do so, ActiveRecord isn't stopping you. That's the great thing about Rails. If you want to write raw markup, sure, go ahead; just don't use any of the helpers provided. Regardless of the means of transport, we're achieving the same goal. How we achieve this is usually personal preference. And for that reason rants like this will always come and go, just as responses like mine.
- patio11 16y agoThe real danger isn't calling yourself a C programmer, it is calling yourself a programmer. That has far more dangerous career consequences, particularly for freelancers.
- AndyKelley 16y agoYou need to explain that for it to make any sense.
- patio11 16y agoIf you call yourself a programmer, sell yourself to management as a programmer, and go about getting jobs by applying for the ones that say programmer in the title, you are boxing yourself in to a career role as a lumpen resource (literally, they will call you a "resource") and cost center, which the MBAs are going to do their level best to either eliminate or replace with a substitutable resource at a quarter of the price. That resource might be a younger resource, or it might be a resource with an accent, but either way they'll check your department's resource box. Instead, you want -- particularly as a consultant -- to be the guy giving measurable, predictable, huge impacts either to costs or, ideally, to driving revenue. If you cannot quantify your worth to the company, it will be quantified for you, and the default guess is going to be -1.5 * $YOUR_SALARY. If you can quantify the value of your work for the company -- by being the guy who makes them money using his bag of magic tricks that management frankly does not understand and does not give a shit about -- your market value will be far, far higher, whether you choose to take it in terms of dollars, flexibility, working conditions, or what have you.
- alextgordon 16y agoIf you accept a job that requires such mindless bullshit, then you're going to get constant mindless bullshit in return, no matter what kind of pretense you cook up. The only winning move is not to play.
- dasil003 16y ago
- apl 16y agoI like Django as much as the next guy, but the framework-obsession that has developed over the past few years does indeed tick me off. There are certain instances (i.e., full-blown web applications) that benefit a lot from employing abstraction tools such as RoR or Django. Equally, whenever there's a lot of variation in the underlying technology, give me a framework! jQuery is a wonderful example for this. However, there's a time and place for such frameworks, and that is not "always, everywhere". Really simple CRUD stuff doesn't require Rails. CSS grid frameworks are a ridiculously inefficient mess. (Aye; even in prototyping.) Most template languages are silly and unnecessary. Et cetera. Sure, it's a rant. But the man has a point. Web frameworks are enabling a whole generation who can't even use a scripting language without relying on plenty of magic. A modicum of abstraction, when sensible? Bring it on. Relentless black box programming? That has its limits.
- lulin 16y ago"Web frameworks are enabling a whole generation who can't even use a scripting language without relying on plenty of magic." I don't really think people program like this. When I tried using rails 2 years ago, all the magic it was doing behind the scenes actually made it impossible for me to use it, as I had no idea what magic was there and how it related to the underlying system. After some time of writing web apps "by hand", then trying out sinatra and padrino, I just recently looked at Rails again and suddenly understood how to use it. What I want to say is that I don't think that the magic Rails does leads to stupid programmers. It will only help those that actually know what they want to do and make the repetitive parts easier. Honestly, I don't want to write a login system with hashing etc. ever again. I don't want to think about how to save old versions of the entries in the database. I don't want to write my own form helpers. I am happy that Rails does this for me and I can spend time thinking about the interesting parts of my program.
- mnutt 16y agoI would argue the opposite -- that really simple CRUD stuff really does need a framework. Why waste your time doing mind-numbing work when you can let the framework do it for you? On the other hand, with full-blown web applications that do something out of the ordinary (long-running requests, etc) it might be better to drop down a level of abstraction.
- codefisher 16y agoHe forgets what the main purpose of frameworks are for, doing all the boring repetitive bits, so I can get down to writing the new and interesting parts of my web app. For example doing form validation, and displaying the errors back again is really common, and annoying. Any good framework makes it painless. And what about running on multiple databases. What happens if I need to be able to support MySql and Postgres? Really hard without a framework.
- sz 16y agoExactly. Pain in the ass does not imply hard to understand.
- AndyKelley 16y agoI used to make all my websites in pure Perl, and got along ok. When I discovered web frameworks (specifically Django), I just about pissed myself. I hate needless abstractions as much as the next guy (more, probably), but I strongly believe that web frameworks will make a programmer orders of magnitude more productive.
- vrode 16y agoneedless?
- promethean 16y agoThat analogy only holds if you can build any object of a carpenter's skill with just a hammer, or just a screw driver, etc. C is a general purpose tool, compared to the task-oriented tools of carpentry. There is a very strong difference in signal from someone telling me "I am an expert C programmer" compared to "I am an expert PHP programmer." Leaving out the name of the programming language all together removes salient content without adding anything else of value. If I want to make your of your programming skills, I'll still need to ask "Okay, what languages?" So, saying that "Calling oneself a C Programmer is like saying you're a Hammer Carpenter" is like saying when there is a choice between tool sets, the choice doesn't matter.
- demallien 16y agoYup, programming languages are (generally) Turing-complete. Hammers are not the equivalent in the woodworking space, good luck cutting that plank of wood into two equal pieces, lengthwise, with a hammer. Saying you're a C programmer is more like saying you're a carpenter specialising in furniture, as opposed to say a carpenter that specialises in houses.
- pavel_lishin 16y ago> cutting that plank of wood into two equal pieces, lengthwise, with a hammer. Sounds like one of those "round manhole" interview questions.
- gchpaco 16y agoI think the solution to that one is to use a hammer to make a saw out of metal and use it.
- pavel_lishin 16y agoBuild a forge. Construct a saw mold. Melt down the head of the hammer into the mold. Meanwhile, carve notches into the handle to measure the board. After the saw cools, find a rock to sharpen it with. Saw the wood in half. This actually sounds like a process that's more fun than some work I've done in the past.
- alttab 16y agoThe author may not have as much experience on a large web project as using something like RoR would help with, but even so I generally agree with him. Specifically speaking, what made me a better programmer was making my own game engines from scratch using DirectX, SDL, and OpenGL. Yup, I wrote 3 different engines on three different technologies (even though SDL uses DirectDraw underneath). What made me a better web developer was writing my own MVC framework for PHP, and then I moved to Rails to be productive. Hiding those details helps certainly, but only if you know them. You still need to know them, which is where a lot of Rails programmers get it wrong, but hiding it will still help you be productive.
- promethean 16y agoReducing this analogy, you obtain the simplest form of "C is like a Hammer". I really want that hammer. With it I could as easily manipulate the molecules in the wood I'm hammering as I could secure the roof to the frame of a house. Buffer overflows would be a problem of course, at least for large buildings with lots of traffic-- after the 4,294,967,296th person the whole thing would just collapse.
- grovulent 16y agoSo I'm a newbie python/django person that has been using them both for about 6 months now. I've had multiple rants directed my way by web developers telling me that I was making a big mistake by using a framework - for all the sorts of reasons listed in this rant. So apparently I'm ruining the universe by employing tools I don't fully understand. I must admit this particular complaint I find a bit perplexing. I'll drop down a level of abstraction if I find the universe demands it of me. Otherwise - I really don't care about what's going on in bowels beneath me. Maybe Gandalf is getting it on with a Balrog for all I know... but for my needs, it just doesn't matter. I mean - I'll learn assembler if I come up against a use case that demands it of me. But that's just not likely to happen for the silly little things I'm working on. I also happen to believe that it's a waste of time to teach kids the algorithm that you work through on paper for long division. Give the tykes a calculator and let society progress at the faster pace that technology allows. I mean - claiming that you need to use an abacas to do basic sums because that's how we old folk did it, is just ridiculous. All algorithms are just effective procedures which depend on a certain level of technological sophistication to be employed. The introduction of arabic numerals meant that we didn't have to use abacuses any more. Hooray! Besides that - I actually know people whose applications I have aped for learning purposes - and I notice that I wrote them in about the tenth of the time, with less than a tenth of the experience, and they also seem to the run at ten times the speed with similar functionality. I hear yarns about how they were doing dumb things like not setting primary keys, or making loads of unnecessary calls on the database etc... and I think about how Django really helps me to steer clear of many of the basic mistakes. I learn about these as I go because I continue to read the awesome documentation as well as digging into the guts of how Django works. Through this I get a lesson on how at least one group of professionals think web development should be done. I personally feel much better placed going forward than all the folks who've had to roll their own over the past 10 years. When I feel more comfortable with Django, probably the next thing I'll do is learn another framework - so as to get another perspective from the professionals. I think it's a great way to learn - personally... and folks who think otherwise I'm going to keep ignoring.
- TheSOB88 16y agoYou don't think it's important for people to learn long division? Other than being one step away from total technological reliance, these kinds of exercises are way of teaching the relationships between numbers, which is INCREDIBLY important.
- jcromartie 16y agoAll of these fancy web frameworks like Sinatra Web.py and Compojure are making us soft. The abstractions that they hide are simpler than these frameworks. HTTP is easy.
- parfe 16y agoMeh, I hate analogies with a passion, but here's my useless rewrite: Calling yourself an Emacs Programmer is like saying you're a Hammer Carpenter. Calling yourself a C programmer is like saying you're a framer. Calling yourself a Ruby developer is like saying you're a brick layer. Both can be used to build a house and it's usually better to work with what you know.
- generalk 16y agoI don't know many folks that call themselves "PHP programmers" or "Python devs". I know a lot of "web developers" that know a bunch of technologies, though. The few people I do know that are "$LANGUAGE developers" usually aren't that good. As far as frameworks go: I use frameworks because I don't want to re-write the same shit over and over again. Yes, I can write an <a> tag, and I can do complex JOINs. Now I use Haml and ActiveRecord so I don't have to spend time hand-crafting every SQL statement I need. I've never understood the whole "frameworks bad" ideology. Just because some folks don't learn anything outside of their framework doesn't mean all frameworks are bad. (See: US Supreme Court, Baby v. Bathwater)
- joelmichael 16y agoI identify as a Rails developer out of expedience. It is what I've worked in for the last five years or so, and where most of my marketable proficiency lies. You could call it my specialization. I know PHP, C, Java, Perl, and others, but why mention them? I haven't used them for work in years.
- 9ec4c12949a4f3 16y agoCalling oneself a C programmer is like saying you work with wood but not metal. Fify?
- cmelbye 16y agoI can drop down to plain HTML without using any Rails helpers, and I can also use standard SQL for queries in ActiveRecord. This is probably the case for most other frameworks as well.
- greendot 16y agoIf you were a carpenter and all you used was a hammer then it would make sense to call yourself a "Hammer Carpenter" to distinguish yourself from other well-rounded carpenters.
- meric 16y agoI like my template language, it lets me write less repeating HTML. I like my SQL wrapper and migration tool, it lets me change the database without worrying about doing the wrong ALTER TABLE. And I like my automatic form validation, its just much less annoying with it than without. If you know all the tools I'm talking, then they are merely abstractions you'd build anyway if you were using no frameworks! The details beneath the abstractions are indeed simple, and likely more simple than the abstractions themselves. Why do we use abstractions if they are so goddamn complicated? You know the answer.
- zafka 16y agoI am an Information manipulator. I happen to be very fond of using C. I sometimes just use my fingers.
- bhiggins 16y agoa web programmer should perhaps not speak of things he does not understand
- Kurtz79 16y agoIt should be something obvious: a language is just a tool, and a good programmer should be able to adapt and learn to use a similar tool in little time. A pity that for many in HR it´s not that obvious.
- rimantas 16y agoAlas, in most cases learning the language is nothing compared to learning and mastering the libraries. And then there is domain knowledge. HTML and CSS can be very easy if you ignore browsers, their rendering modes, accessibility requirements, etc.
- ethyreal 16y agoI love that a four year old programming rant is still poignant.
- xutopia 16y agoThe analogy fails. Have you ever seen a carpenter never ever use a hammer? They have to use it as some point but I've seen many successful programmers never use C in their life.
- jrockway 16y agoReading forums where PHP Programmers hang out and ask about other langauges is like hitting yourself on the head with a Carpenter's Hammer.
- SeanDav 16y agoThe Arch Overlord has a point but he has chosen to make a stand on an issue that is shades of Grey and not Black or White. At the end of the day abstraction can be very useful, even if you don't understand the underlying technology, depending on what problem is trying to be solved. Today it might be useful to do SQL queries and Form handling via OO and tomorrow it might be more useful to go hack some raw HTML. The answer is, almost as always, "it depends". One could take his argument to ridiculous levels and say if you don't fully understand Machine Code and every layer of Abstraction above it, you are doing something wrong. Clearly a ridiculous argument although I have no doubt that if you did understand all these layers you probably could safetly call yourself a good programmer :)
- techiferous 16y ago"make a stand on an issue that is shades of Grey and not Black or White" There is much more of this type of discourse in the programming community than I can bear. I think it happens when a young programmer gets just enough experience to gain confidence but not enough experience to gain perspective.
- igrekel 16y agoThe title was promising but I found the point of the post moot. The title made me think about the fact that a large segment of the market tends to categorize developers on the tools they use rather than the things they build.
- jdietrich 16y agoThe "programming language as tool" metaphor is terrible. I don't have a clue how pointer arithmetic works. I'm vaguely aware of it, but it just never comes up in my professional life. I'm absolutely fine with that, just as I'm fine with the idea that a cardiac surgeon may be vaguely aware of how to perform a kidney transplant but doesn't know the details. Let's be realistic. The days of wizard programmers single-handedly designing an operating system are gone. We're all specialists now. An embedded systems programmer has absolutely no need to understand the intricacies of XML schema or the finer points of CSS parser bugs. Beyond a broad sketch, I have no real need to know the fine details of memory management. I'm happy to call myself an ECMAScript programmer because that's what I do, that's what I have done for some time and that is what I expect to do in the future. I know other languages, though none well enough to produce work I would be happy to put my name to (apart from Scheme, but who's going to hire me to do that?). Like it or not, I'm not a computer scientist. I'm a working programmer and my view of the world is inevitably coloured by the raw material I work with every day. The way I think about code, the way I design problems is an imprint of the capabilities and limitations of my usual languages. I imagine a sufficiently literate computer scientist could smell it on my breath, or at least infer it from the way I might sketch out a diagram or pseudocode solution.
- mrj 16y agoI think the point is, you'd have no problem learning pointer arithmetic if you needed it. It's not hard.
- rick_2047 16y agoNo the point is, he doesn't need it right now and as he has projected his future interest, in the future.
- msbarnett 16y agoNo, the point is, he can never evaluate if he'll ever need to know it, now or in the future, as long as he doesn't know anything about it. It's impossible to evaluate the utility and applicability of knowledge you don't have.
- Luyt 16y agoThat article is from 2006. Somewhere the Arch Overlord states: "CherryPy is more restrictive than web.py - web.py uses the RoR Routes technique (I think Django does too)", but nowadays CherryPy has a 'RoutesDispatcher' too, among other types of dispatchers, which can be chained. http://docs.cherrypy.org/dev/refman/dispatch.html#cherrypy._cpdispatch.RoutesDispatcher http://docs.cherrypy.org/dev/refman/dispatch.html#cherrypy._...
- coliveira 16y agoI agree that web frameworks make things more complicated than they really are. In other words, they make things simple in the beginning (when you are creating the project), but they get more and more complicated when you try to customize the application. Despite all the problems with PHP, it still gives you a middle of the road approach. You have all the tools to do the stuff you need to do, but at the same time you have access at how things really are done. For example, you can handle SQL by hand or create your own objects to do what is necessary. I think this is really useful, and would like to have something like this in other languages as well. I realize, however, that the reason PHP allows this operation mode is that it was created as a web language itself, not a set of libraries on top of an existing language.
- jayF88 16y agoc is god
- Goladus 16y agoCalling yourself a C Programmer isn't anything like saying you're a hammer carpenter. The analogy breaks down so quickly I don't know where to begin. Maybe here: A programming language is a tool. Each one fits it's own problem-set. And what would that "problem-set" be, exactly? The boundaries between the utility of a hammer and utility of a saw are quite clear. The boundaries between the utility of PHP and Ruby are very blurry. Strictly speaking, both languages are turing-complete and are equally capable of solving the same "problem-sets".
- jdvolz 16y agoActually, I would have characterized this more as: "Calling oneself a C programmer is like saying you're a finish carpenter." As in, it means you normally work in a particular set of circumstances, which is all we're aiming to say when we denote the language we work in (because language is often closely allied with the type of project). Does it define you as a person, or even state that you don't work in other types of projects, no, it doesn't. Can we move on from this now?
- reynolds 16y agoThese types of rants always strike me as being ignorant. It seems like it's just taking this one person's view of software development and trying to apply it to everything. To me, it's on the same level as saying "real programmers use X".
- vrode 16y agoWhat if I wrote the wrapper myself?
- stevenwei 16y agoIn my experience, the only people who actually prefer writing web apps in raw SQL/HTML either 1) have never written a real web app or 2) tend to write highly insecure code without even realizing it. A few things that web frameworks/libraries help with: Forms: - Validation & displaying errors & input sanitization. - CSRF checks. - Safe file upload handling. - HTML generation is useful for removing a bunch of boilerplate. ORMs: - Default SQL injection protection. - Query objects help you construct complex queries without having to do a bunch of string manipulation. - Database abstraction (e.g. moving from MySQL to PostgreSQL is a lot easier). - Database migration tools to help you upgrade your schema. Templates: - Inheritance & replaceable blocks reduce a lot of boilerplate code. - Tools to help you safely escape user generated content & transform it for web presentation. Misc: - User authentication. Rolling a secure implementation on your own is no small task. - Secure cookie and session management. - Providing an organized architecture with sensible separation of concerns. Now, to be a solid web developer I agree that at some point you're really going to need to understand the fundamentals of how each of these things works under the hood, but you're crazy if you'd rather write all that code by hand instead of using solid, well-tested, existing libraries for it. Note: That's not to say that using a web framework will automatically make your code secure (the recent Diaspora debacle clearly demonstrates otherwise). However, you've already got so much code to worry about securing in your own application, why would you want to have to hand roll everything else too?
- deleted 16y ago[deleted]
- michaelchisari 16y agoI couldn't agree with this rant more. I use frameworks because they streamline my code, and provide basic abstractions for simple tasks. One of my biggest issues with Rails (to be fair, it's more about people new to rails), is the way it sees abstraction as a form of magic. Simple tasks should be abstracted, but abstracting complex tasks is a recipe for disaster down the line, when you need to operate outside of the confines of the abstraction. This can be mind-numbinglyannoying for experienced programmers, and frustrating for new programmers. I do want to address specifically the idea of abstracting out things like HTML or SQL. These are my two pet peeves. I look at something like HAML, and I can't understand why anyone would consider that to be a good idea, even putting aside the fact that your designer will have to learn a whole new syntax, but the idea that markup should look like programming language defeats the point of a markup language. Here's how I did it with Appleseed, using the simple_html_dom library. Views are dumb, very dumb. You create a view which is only markup, for instance: http://github.com/appleseedproj/appleseed/blob/master/components/friends/views/friends.php http://github.com/appleseedproj/appleseed/blob/master/compon... So you properly class and id your markup, and in the controller, you populate the data, repeating elements for lists or tables, by targetting the dom. If I want to set the title on this view, I do: $View = $this->GetView ( 'friends'); $View->Find ( '.profile-friends-title', 0 )->innertext = "New Title"; That's it. No template pseudo-code, designers only have to care about the markup itself. On the front-end, I do the same with Javascript. Think of it as unobtrusive PHP. I also stay away from ORM's. I understand all the arguments in favor, but in the end, I'd much prefer writing complex joins than using an ORM. Separation of concerns is so important, and yet, sometimes I think frameworks, which are supposed to facilitate that, actually can make it worse, by trying to reinvent the wheel in abstract ways.
- ubernostrum 16y agoYou only get to write this rant if you built your computer yourself, smelting the metal and crafting the circuits by hand, without recourse to off-the-shelf parts, and then wrote every bit of code for it on your own, from the lowest-level drivers to the highest-level interfaces. And for bonus points, you have to use it by toggling ones and zeroes manually, since all those wrappers hide things and get in your way.
- endergen 16y agoI agree with this point for sure. Frameworks are great if you are going to leverage a lot of the libraries/modules. But often in practice you never do. So then you end up taking on the issues with using a large codebase. Which is that when you find a bug, it's very hard to trace through code to figure out what's going on. You are investing in learning a specific library/framework rather than the low level details that are on average what you'll need more because in practice you don't get to use the same framework all the time if you switch companies or projects as they tend to have entirely different frameworks or even languages on the backend. I like how Marcin Wichiary though in this ajaxian.com article: http://ajaxian.com/archives/web-ninja-interview-marcin-wichary-creator-of-google-pacman-logo-html5-slide-deck-and-more http://ajaxian.com/archives/web-ninja-interview-marcin-wicha... He basically builds all his libraries from scratch for each project which he can do quickly because he knows what he's doing and can of course leverage his other code for reference. Each iteration simplifies what turns out to be bloated and creates a new code base more matched to the problem he's trying to solve.
- uxp 16y agoI view ORM and MVC frameworks like a stepping stone. I first started programming using these wrappers/layers because it was simple to use. I was able to get the same data I could have if I statically programmed SQL queries onto my code, and I didn't care if I executed 1 or 50 queries for each page that loaded. Who cares if SomeGuyJoe's site does this. If what his site does works, who cares how it is done. When I decided I wanted to learn more, I started to learn what the abstractions did, and hacked and changed it to be better for my particular use. Then I moved on to lower level languages, and now I have a decent understanding of how to write my own abstractions, yet I still use abstractions because they let me focus more on what I am wanting to do, instead of how to do the things that let me do it. This post could be changed to say that anyone that learns a higher level language is harming themselves. The skills and syntax you learn from Python cannot be used in C# or Java, so you should just learn assembly. It is all machine code in the end and these languages are just facades. Only real men program by moving bits to registers.
- binaryfinery 16y agoPerhaps people call themselves a C programmer because they are advertising their skills for a job. Calling themselves "a programmer" might find them getting less jobs. But to assume the argument has merit, lets follow it to its natural conclusions: since when was SQL a low level language?! SQL servers are vastly more complicated than Rails. Another assumption the author makes is that, for any programmer, SQL is the constant, and time spent learning Rails is wasted if one has to switch to Django. This just shows the limited world view of the author. For many, Rails is the constant, and SQL, Couch, or Mongo are the choices. To stick with the tool analogy, C is the giant processing equipment that skilled operators used to print my photos in an hour (http://bit.ly/aCoA0K http://bit.ly/aCoA0K), while Rails is the little Canon Selphy sitting on my desk. Both produce identical results. One of them does it a lot faster, for a lot less money, and a lot less failures and maintenance.
- gills 16y agoI think it's more like wearing hammer pants.
- abalashov 16y agoI got news for you.... these "details" that are hidden, they're less complicated than these frameworks. Amen. Insight of the century with regard to Rails, J2EE, BPEL, and a number of other boondoggles.