6 ms·
Rails isn't for beginners
- ZanderEarth32 15y agoI am a beginner and you are 100% right. I am working my way through learning some Python and when I started to find stuff referring to Django and web frameworks, they all seem to be touted as 'easy'. So, I thought, 'what the hell, let's build a web app'. After installing Django I was totally lost. Sure, I could install the framework and work through the tutorials but I am still miles away from actually building something on my own, because, while I know how to write some lines of code and create some basic tools I still don't know how to BUILD anything.
- xyzzyb 15y agoYeah, I'm realizing that there isn't a great starting point for someone to get into web development from scratch. I don't think Django or Rails should even factor into it. I've liked what I've seen of Code Academy, that might be something to look into if you haven't already: http://www.codecademy.com http://www.codecademy.com
- ZanderEarth32 15y agoThanks, I went through the Code Academy courses and they were fun and helpful, but the biggest strides I've had in programming have been thinking of an idea and then trying to build it from what I know. This way, I am applying what I already know, further cementing it and it forces me to run into problems that I cannot yet solve. I spend up to a week trying to figure out a solution to that problem on my own. If I can't, I'll head to Stackoverflow and ask there. That's been the best way for me so far.
- xyzzyb 15y agoAbsolutely. Thinking of an idea and then coding to its realization is a classic method of learning to program. It sounds like you have a great system for learning. I'd only caution that even if you come up with a solution to a problem on your own: do the search engine/stack overflow research anyway to see alternative methods. If you don't find any: blog about it.
- mmackh 15y agoI would argue that the lack of a simple installation process to get Rails running makes it inaccessible for a lot of beginners (myself included). Without stackoverflow, I wouldn't have known where to start - or what commands I'd have to enter into the terminal. As far as I know, there is no script that automates this process. Compare this to PHP, where most of today's shared hosts support it right out of the box.
- xyzzyb 15y agoExactly. I do love Rails and it's great for what it does, but it isn't (and never was) designed to help beginners write web applications.
- a-priori 15y agohttp://www.kickstarter.com/projects/1397300529/railsapp http://www.kickstarter.com/projects/1397300529/railsapp
- xyzzyb 15y agoI'm pretty interested in that project. We had a dev on Lion try to get a Ruby 1.9.3 + Rails 3.2 environment up who ran into all kinds of issues: a far cry from the days of locomotive indeed.
- prezjordan 15y agoI've found that rvm makes everything easier. And through OS X development I've also learned that I should avoid port at all costs.
- xyzzyb 15y agoRVM is superb. And, yes, I think a major issue was that he was trying to use macports for installation of things instead of homebrew.
- mattbriggs 15y agofor future reference, step 1 - gcc toolchain (https://github.com/kennethreitz/osx-gcc-installer https://github.com/kennethreitz/osx-gcc-installer or xcode), step 2 - rvm (http://beginrescueend.com/ http://beginrescueend.com/), step 3 - "rvm install 1.9.3 && rvm 1.9.3 --default && gem install rails" (homebrew will also probably be necessary for any dev work on osx, but not really needed to get rails going)
- joedev 15y agoInteresting that right at the top of rubyonrails.com is this quote: “Ruby on Rails is a breakthrough in lowering the barriers of entry to programming. Powerful web applications that formerly might have taken weeks or months to develop can be produced in a matter of days.” -Tim O'Reilly, Founder of O'Reilly Media
- xyzzyb 15y agoYes, the barrier to entry to writing web applications is significantly lowered by Rails; but it's not meant to be a replacement for experience. Rails is supremely helpful, but not explicitly designed for beginners.
- techiferous 15y ago"Powerful web applications that formerly might have taken weeks or months to develop can be produced in a matter of days." This is true if you are already an experienced web developer. You already know the problem space well and have an intuition about good solutions and approaches. Someone handing you Rails as a tool can certainly speed up the development time. This is also only true if the application is trivial; you can only create a simple "first cut" of a product in a matter of days. "Ruby on Rails is a breakthrough in lowering the barriers of entry to programming." I think Ruby is a great first programming language; it has a cleaner, more consistent syntax than some other languages with fewer gotchas and edge cases (I'm looking at you, JavaScript!). Rails, on the other hand, has a lot of magic, so that if it is your first programming experience, you will probably approach programming more in terms of memorizing and repeating the magical incantations instead of having an understanding of how the system works and practice in designing and crafting good systems of your own. So in that sense, Rails (and the state of web programming in general) may make it harder for people to get really good at programming.
- mgkimsal 15y agoI'd always remembered word-of-mouth from Rails enthusiasts touting how easy Rails was (talking 2006-2007). A Rails guru last summer told me that 'Rails was never promoted as being easy'. Was my memory faulty? Has the PR around Rails changed over the years?
- xyzzyb 15y agoI couldn't say, I'm not familiar with the PR around Rails. But I will point out that Rails being easy is different than Rails being for beginners. Rails is easy in that it solves a lot of pain points that exist around web development. If you are an absolute beginner then you won't yet have any conceptualization of the pain points and Rails will just seem needlessly complex.
- bphogan 15y agoIf you're a beginner, as in, never made a web app in your life, Rails is going to be hard because it expects you to know so much. But if you're a seasoned web developer who knows JS, HTML, CSS, and SQL, and has a grasp on OO programming, Rails is easy. To be honest, the CS students that intern for me are working on the production apps within a couple of weeks.
- mhartl 15y agoRails was promoted as being productive, i.e., able to produce amazing results fast. To my recollection, it was never promoted as being easy to learn.
- ahoyhere 15y agoIt was promoted as being easy for people who already knew how to program. Which it was. The 5-minute blog video wouldn't help a total newb at all, but to an experienced developer it's clear how powerful it was.
- wh-uws 15y agoI can attest to this. I was a total noob when I saw that video and didn't get it. Spent several years in the murky php waters because I could just drop that code in the html I did know and go. Now that I have more experience its more more clear the benefits of rails/django
- xxdiamondxx 15y agoI agree completely. A couple of months ago my sister approached my and asked "How do I learn how to make websites?" She has no programming experience, so I thought for a while on where to start. I figured if I showed her what I was working on in Python/Django, she would be completely overwhelmed. So I started with just HTML. As she worked through that, she started asking questions like, how to change layout and fonts, so we started working with CSS. She's not at the point yet, but I think PHP is going to blow her mind, as I've seen her copy/pasting stuff from file to file. I think its important to start at the beginning and learn some of the pain points that these frameworks solve before jumping in. Otherwise you just get frustrated wondering why things are set up a certain way.
- xyzzyb 15y agoThat's the nail on the head right there. Without any context even the conventions of Rails seem like arbitrary decisions just to make things complicated. Once you understand the problem you can appreciate the solution.
- kristianc 15y agoI'm not sure. I remember learning HTML and CSS through WYSIWYG editors such as Dreamweaver (essentially abstractions, no?), and then getting frustrated by how much excess code it was adding. That then gave me the impetus to delve into the code and then begin learning the HTML, CSS, principles informing the design. Had I started back then trying to tackle HTML head on, I might have been overwhelmed. Similarly, I'm trying to learn building web apps at the moment. I'd rather have some decisions taken for me by Rails (in the knowledge that they've been based on some kind of best practice / consensus) and try and build backwards from there. It's probably not the purists way of learning, but then I don't have the level of expertise a purist probably does.
- xyzzyb 15y agoComing to Rails frustrated with the slog that you have to deal with otherwise is exactly the path that Rails was designed to accomodate. You know and appreciate the fact that Rails is making decisions for you to help you get going while a beginner would probably be overwhelmed by all the complexity.
- japhyr 15y agoI come from the django camp, but I feel this article applies to both frameworks. I teach high school math and science, and I have started teaching python to interested students. It has been very satisfying, and now students who didn't think themselves capable of learning to program are interested because they are watching their friends have fun with it. They enjoy writing programs that output to the terminal, and some students are developing gui-based programs. This has led me to consider whether I could teach them to build web apps using django, or rails, or any other framework. It quickly becomes a daunting proposition for anything nontrivial. You can follow tutorials, books, and videos all you want. But when it comes down to it, every good web app is developed over time through iteration and troubleshooting. Those are two areas where you simply have to understand what is going on under the hood to be successful. It's nice to work with data through an abstraction layer, but when you do something that doesn't work well with the abstraction layer you need to be able to do some manual twiddling with your actual database. Frameworks make it easier for experienced developers to build meaningful projects quickly, which they are then able to maintain based on their deeper technical understanding. Frameworks may help inexperienced people play with a simple web app. But frameworks don't let the average person build and maintain complex web apps.
- xyzzyb 15y agoYou're right, this applies just as much to Django. I should really have said, "Frameworks aren't for beginners". A framework allows an expert to get going without dealing with the trivial details; but to the beginner there are no trivial details.
- treme 15y agoI wish I had you as my teacher...my teacher photocopied teach your self SAM series.
- thisishugo 15y agoI think it depends on the framework. A full-stack framework such as Rails or Django isn't going to help with learning because it 'magics' too much of the underlying structure of building a web app away. You end up using so many proprietary pieces, all of which "just work" (and don't worry how, just know that it does) together. Conversely, micro-frameworks such as Sinatra and web.py (the structure of which inspired App Engine's webapp, and Friendfeed's Tornado) get rid of just enough of the underlying complexity of getting Ruby/Python to talk to a browser to, as is often said, let you feel as if you are writing a Python (or Ruby) web app, rather than a Django (or Rails) web app. Perhaps the middle ground for your students is frameworks such as Flask and Pyramid, which start as a micro framework, but which offer the full-stack batteries included features as and when you need them.
- kaiuhl 15y agoLearning to program is all about learning mental abstractions. A beginner will have no conceptualization of what a web application can or should do. Where an experienced web programmer from any language will hear requirements and immediately (and almost unconsciously) start building up a mental model of the problem domain, the beginner will still be struggling with how the system itself works. That will be true in any web development framework, because there’s simply no way for any framework to think through the problem for you. This.
- swombat 15y agoThis will probably get downvoted into oblivion (fair enough since it's a thoroughly unconstructive comment) but I'm really developing a pet peeve against comments that basically consist just of the word "This." or start with "This." and follow it with some tame form of agreement. I find it about 2.44 times as annoying as someone commenting "upvoted". I now reflexively downvote any comment starting with "This.". I know I have no power to alter such a strong internet meme, but I thought I'd mention it to get it off my chest. Sorry for wasting your time with this post.
- deleted 15y ago[deleted]
- TheCapn 15y agoFunny. "This will probably get downvoted into oblivion" is my pet peeve. There's just something that irks me about a person who is putting up their opinion voluntarily seemingly knowing that it will not be reciprocated by others but provide a pretext hoping to fish guilt from others who may disagree. If you have an opinion stand behind it; take whatever berating you're about to receive in full confidence because what really matters if the community as a whole doesn't share the same outlook?
- deleted 15y ago[deleted]
- erikpukinskis 15y ago
- cosecant 15y agoI am a huge advocate for the Django web framework, yet I always tell people that web frameworks (Django|Rails|etc) are not for beginners. Like many have mentioned, it's easy for experienced web programmers that have been mucking around things done "the old fashioned way" and without any true MVC structure. I assume it would be difficult for novice programmers to really understand what the advantages and best practices of MVC web frameworks are for, when they have little experience of having worked in anything else.
- saltcod 15y agoI got pretty far along with Rails Tutorial, and came to love Ruby after just a short time. Its so nice and such a refreshing change from PHP. BUT! What I hadn't anticipated was really not knowing anything about how to make a web app. I knew nothing about REST, nothing about get/put, nothing about forms, etc. I thought Ruby and Rails were the answer to the problem I'd been having for years. I thought that I was just in need of the right programming language to help take my skills to the next level. I realize now however, after some cool Ruby bits and some Rails basics, that you're only going to get the best results out of language and framework when you know the basics. And there's a lot of basics: rest, basic http methods, forms, sql, routes, etc etc etc.
- dysoco 15y agoSo as someone who has programmed before in C# and Python, and has a knowledge of OOP, what would you suggest to start in Web Development (Apart from HTML, CSS and JS) ? I tried PHP, but I found the syntax extremely awfull and verbose, any alternatives ?
- xyzzyb 15y agoI'm not up on current Django tutorials (which may be more your style since you're already familiar with Python) but you are a great candidate for Michael Hartl's fantastic Rails tutorial: http://ruby.railstutorial.org/ http://ruby.railstutorial.org/ You can buy the books and screencasts or read the whole thing online for free.
- mattbriggs 15y agoIf you want to stick with a language you know, ASP.net MVC and Django are both great full stack frameworks for getting complex stuff done quickly and well. If you want to go a bit more of a futureproof route, focus on learning something like backbone or ember, and treat your server as an api. In that case, what framework you choose doesn't matter so much, as long as it provides good json serialization and easy data access.
- Deinumite 15y agoI know C# is a great C styled language but calling PHP too verbose is a little... strange imo. When you say you "tried PHP" I'm assuming you didn't start with a framework of some sort? Writing straight PHP scripts will probably rot your brain. http://fuelphp.com/ http://fuelphp.com/ or http://laravel.com/ http://laravel.com/ Would be my two cents from the PHP crowd.