I question starting people on Ruby for web development. It was big and popular, but I feel that the popularity is fading (has faded?) for new projects, and there's a lot of magic in that language, too.
Anyone starting web development now would do well to stick with Javascript. No, it's not the nicest language, but there's no avoided it. And you can always use that on the backend if you have to - and if you need to spend time learning something for the backend part you'd be better served learning about relational databases than Ruby.
Anyway, between JS, HTML, and CSS, you're going to have a lot to learn. At least with CSS these days you can pretty much start with flexbox for layout, and maybe if you're lucky you'll never have to learn all the old horrible methods of getting things to look reasonable - or you'll have a solid foundation when you do encounter them.
Problem is, none of the frameworks allows you to get up and running as quickly as Rails. Even Django doesn't come close in matching the sheer amount of magic in the Rails. There are gems available for everything under the sun; it's fun and all to play around with new frameworks but having to reinvent the wheel gets tiresome really quickly. Debugging can be a bit tricky and it's not the most performant framework out there but the overall productivity still outweighs everything else on the long term. Nothing else (except perhaps MS Access and their RAD tools) comes close to the speed at which one can get a CRUD app up and running and CRUD apps are pretty much 80% of all web apps.
I'm one of the maintainers of the project, I think that Ruby is still a good language for beginners to learn programming.
Ruby has very expressive syntax, allowing beginners to focus more on the core programming concepts. Its object model also makes it a nice language to learn the basics and best practices of OOP.
The resources out there for beginner programmers and Ruby are also top notch and the community is very friendly to beginners.
This is completely anecdotal, but we've had a fairly decent number of students come into the chat rooms telling us they started with javascript as a beginner but weren't getting it, ruby was much easier for them to get up to grips with.
I admit that I've seen a few students put off with the magic in Ruby, but those really have been a very small minority of students compared to those who really embraced learning it.
In saying all this, we have plans to focus more of our efforts on Javascript and give students the option to choose a javascript track in the curriculum.
When hiring junior developers, I look for experience in at least two general purpose languages, because I think comparing and contrasting at least two languages gives you a valuable and necessary perspective. In web software engineering, Ruby+JavaScript (or Python+JavaScript or Go+JavaScript, etc) is a convenient and powerful way to check this box, but "full-stack JavaScript" falls short.
Based on what I've seen "in the wild", my current recommendation is to first learn the basics in Ruby (a week or two - from basic arithmetic through objects), and then jump to Javascript.
This is primarily because most of the "learn X" that I've seen for Javascript is pretty web-centric, while the "learn Ruby" things that I've seen are much more general CS. So the idea is to first get a basic grounding in general programming, and then jump into the thing you'll use a lot for your particular application.
Example: Learning about scope in JS versus basically anything else.
Also, Rails really does encode basically all the best-practices - so when you literally don't know any better, you can still succeed. And then when you move away from Rails, you have a known-good way to start anything.
Probably the same reason there's so much jQuery in the front-end curriculum. Five years from now it may not be true, but there's still a ton of jobs in Ruby and jQuery. (more so than in some of the "cool" stacks)
im not so sure if js is the right choice for beginning developers. i actually would not encourage beginning developers to jump into javascript. well, im assuming we are talking full stack here and not just client side, as the state of js is in flux and the js fatigue is real. and i cant imagine letting beginning developers to go through that even when experienced devs are having trouble dealing with it.
basically nodejs is not just getting into express anymore. although optional, most likely you will soon have to get into things like react, flux, transpiling, and understanding immutable and fuctional programming, which are all IMO a bit too much for developers to jump in to. also, js is currently changing at a rapid pace, what they learned a year ago is most likely obsolete in todays standards, ie: es5/6/7/next. i have not seen a language change so many times in such a short period of time, i cant imagine how beginning developers can deal with it.
i actually had a chat with recently grad bootcampers who went through a 3months courses of rails and then nodejs/react from General Assembly in LA. their responses to rails was easy to learn and they picked it up right away. but once they got to react/nodejs their experiences were something closer to horror.
id say js indeed was a good choice for beginners 3 - 4 years ago but now there are so many baggages involved such as dealing with setting it up through webpack and its many ways to transpile such as esnext/jade/stylus/etc.
so unless you have a few years of programming experience, i would not recommend devs to go through js at this time.
basically i can teach someone rails on how to build real world applications in a few weeks. but with js, id still be explaining the internals like what is a promise, async vs synchronous function, etc. and this even before diving into the world of redux, map reducers, webpack, immutablejs, higher order functions, and ... the list goes on.
anyway you take it, its a long road ahead with js, much longer than most people will tell you.
If you are writing RDBMS centric apps, the way your app interact with your DB matters a lot, maybe even more than choice of a programming language. This is where ruby has real superstars, Sequel and ActiveRecord. Nothing I've seen in other languages comes close to Sequel's power, expressiveness and flexibility to query databases. This is the main reason I use ruby. On top of that, ruby is so elegant, it often puts a smile on your face, when you realize how elegantly you have solved a particular problem.
I tend to agree. Ruby isn't super applicable in 2017 either. Most tech companies have moved to a microservices architecture and while they may have some legacy Ruby hanging around, it's unlikely they're building anything new with it.
Someone learning web development now has a long road ahead of them. They'll need to learn everything. Not just some backend language, but all the front-end frameworks, functional programming, Sass, build tools, typescript, etc. The list is endless.
> I question starting people on Ruby for web development.
This.
What's a synergistic language? Javascript (i.e. it's required learning for the browser, and you get the backend with Node - and you point this out.) Javascript has advantage from browser monopolization.
What's a great and increasingly popular language for the backend? Python. And Python is so nice that we don't need a slogan about how "Guido is nice so we are nice" (with apologies to Matz and the dwindling Ruby community).
Write your software so simple that there are obviously no deficiencies, not so complex that there are no obvious ones (Hoare, 1980). Ruby is way more complex than Python because there's a bajillion different ways to do it.
To me the only point of learning Ruby is if you're already in a job that maintains a Rails app.
The battle for the supreme interpreted language isn't over, but, like Perl, it's my humble opinion that you can count Ruby out.
Anecdote: I hired an Odin Project "graduate" in early 2015, somebody who had gotten a CS degree 10 years earlier but never done anything with it. The Odin Project had prepared him to hit the ground running on modern web software development, and also prepared him for evaluation for our job, with an impressive capstone project. He was a successful hire without a doubt.
I am currently learning with the odin project. I see most of the discussion so far focused on whether ruby is right language. I think the project is very valuable not for its choice of language but for its overall excellent content and approach. A few examples
- When doing my first lessons on ruby you are asked to read several tutorials. I thought, well I already learned that, but in every article I managed to find something new.
- It uses a multitude of other learning sources, does not even try to cover too much themselves. So you get to learn in very different ways. Reading good articles, watching some talks, downloading a repo where you need to write the code to make the test run successfully. Overall I feel, I get the best content, not because they write the best content (who could do that for all the subjects?), but it points you to great content.
- Contrary to many online tools, it forces you to work on your own system, which is a good thing.
- It often forces you to define the problem you are solving yourself. Many online courses make it too easy, you just learn coding. You don't learn to structure the problem.
- It also tries to give you a solid programming knowledge before going into web development. I really appreciate that. It's so easy to learn some angular or vue.js, then you... just need to fetch some data, ah how do I store data, oh and authentication and authorization, oh and... and quickly you get lost. I think it's is very beneficial to first get some solid programming knowledge before diving into the whole server / db / frontend stack.
"they've been totally in control of the process until now and they've probably dragged their feet because they can (who knows, an even better developer might show up, right?)."
I don't care about the which-language-is-best-to-start-with debate that is being argued in full force here. If you want to rails, knock yourself out. If you want to JS, woo! JS!. I care a lot about seeing your potential employer as an antagonist. They have just indicated to you that they like you enough to invite you to join them. Negotiate, sure, but assume good faith. And the very idea that they were waiting for a better candidate who didn't show up undervalues you. YOU were the one that impressed them most. How well you code was only a part of their choice. They liked your personality best, too, and your honesty, and your dedication, and that indefinable other thing that's hard to quantify.
They are likely the good guys, and they see you the same way. Now go ask for a better salary, or more vacation, but don't assume the worst.
Hey, one of the maintainers of the project here. The website was hastily threw together a few years back to host the curriculum. Its never been that great. We are working hard on rectifying that with a complete redesign though https://staging-odin-project.herokuapp.com/
The project itself is a great concept but pushing people into RoR and jQuery? Really? Come on, it's 2017. Ruby is hardly a marketable skill, there are very few agencies still utilising it on new projects. I'd also be shocked to see a new project built with jQuery in this day and age.
Teach beginners backend JavaScript with Node.js. It's not a matter of personal preference, JavaScript is objectively easier for beginners to learn and utilise for backend programming because arbitrarily introducing another language when they already know front-end JS increases cognitive load for no benefit.
Thanks for making this.
Quick feedback: The 'Points to Ponder' section in the 'Javascript Basics' course should probably be put in a Bootstrap Well. On browsers/OSs where the scroll bar isn't shown unless you scroll, it can easily be missed. I feel if it has to be a scroller within a scroller, it should be visibly distinguished. Good luck!
This is an example of a terrible web app. I think a company that provides a course to learn web development should put in the effort to make their website a shining example of the best techniques and technologies. This looks like it was made by an amateur.
[+] [-] vosper|8 years ago|reply
Anyone starting web development now would do well to stick with Javascript. No, it's not the nicest language, but there's no avoided it. And you can always use that on the backend if you have to - and if you need to spend time learning something for the backend part you'd be better served learning about relational databases than Ruby.
Anyway, between JS, HTML, and CSS, you're going to have a lot to learn. At least with CSS these days you can pretty much start with flexbox for layout, and maybe if you're lucky you'll never have to learn all the old horrible methods of getting things to look reasonable - or you'll have a solid foundation when you do encounter them.
[+] [-] Immortalin|8 years ago|reply
[+] [-] KevinMul|8 years ago|reply
Ruby has very expressive syntax, allowing beginners to focus more on the core programming concepts. Its object model also makes it a nice language to learn the basics and best practices of OOP.
The resources out there for beginner programmers and Ruby are also top notch and the community is very friendly to beginners.
This is completely anecdotal, but we've had a fairly decent number of students come into the chat rooms telling us they started with javascript as a beginner but weren't getting it, ruby was much easier for them to get up to grips with.
I admit that I've seen a few students put off with the magic in Ruby, but those really have been a very small minority of students compared to those who really embraced learning it.
In saying all this, we have plans to focus more of our efforts on Javascript and give students the option to choose a javascript track in the curriculum.
[+] [-] gkop|8 years ago|reply
[+] [-] RangerScience|8 years ago|reply
This is primarily because most of the "learn X" that I've seen for Javascript is pretty web-centric, while the "learn Ruby" things that I've seen are much more general CS. So the idea is to first get a basic grounding in general programming, and then jump into the thing you'll use a lot for your particular application.
Example: Learning about scope in JS versus basically anything else.
Also, Rails really does encode basically all the best-practices - so when you literally don't know any better, you can still succeed. And then when you move away from Rails, you have a known-good way to start anything.
[+] [-] bdcravens|8 years ago|reply
[+] [-] jaequery|8 years ago|reply
basically nodejs is not just getting into express anymore. although optional, most likely you will soon have to get into things like react, flux, transpiling, and understanding immutable and fuctional programming, which are all IMO a bit too much for developers to jump in to. also, js is currently changing at a rapid pace, what they learned a year ago is most likely obsolete in todays standards, ie: es5/6/7/next. i have not seen a language change so many times in such a short period of time, i cant imagine how beginning developers can deal with it.
i actually had a chat with recently grad bootcampers who went through a 3months courses of rails and then nodejs/react from General Assembly in LA. their responses to rails was easy to learn and they picked it up right away. but once they got to react/nodejs their experiences were something closer to horror.
id say js indeed was a good choice for beginners 3 - 4 years ago but now there are so many baggages involved such as dealing with setting it up through webpack and its many ways to transpile such as esnext/jade/stylus/etc.
so unless you have a few years of programming experience, i would not recommend devs to go through js at this time.
basically i can teach someone rails on how to build real world applications in a few weeks. but with js, id still be explaining the internals like what is a promise, async vs synchronous function, etc. and this even before diving into the world of redux, map reducers, webpack, immutablejs, higher order functions, and ... the list goes on.
anyway you take it, its a long road ahead with js, much longer than most people will tell you.
[+] [-] YorickPeterse|8 years ago|reply
When learning/teaching something you very much want to pick something that:
1. Has been around for at least 5 years
2. Is actively used, maintained, and overall has proven itself
3. Has good documentation and tooling
4. Perhaps has programs to help people getting started (Rails Girls, PyLadies, etc)
5. Is still around 5 years from now
Ruby and Rails are a perfect choice for this, though Rails (just like most frameworks out there) _is_ a bit complex for total beginners.
[+] [-] master_oogway|8 years ago|reply
[+] [-] ryanSrich|8 years ago|reply
Someone learning web development now has a long road ahead of them. They'll need to learn everything. Not just some backend language, but all the front-end frameworks, functional programming, Sass, build tools, typescript, etc. The list is endless.
[+] [-] aaronchall|8 years ago|reply
This.
What's a synergistic language? Javascript (i.e. it's required learning for the browser, and you get the backend with Node - and you point this out.) Javascript has advantage from browser monopolization.
What's a great and increasingly popular language for the backend? Python. And Python is so nice that we don't need a slogan about how "Guido is nice so we are nice" (with apologies to Matz and the dwindling Ruby community).
Write your software so simple that there are obviously no deficiencies, not so complex that there are no obvious ones (Hoare, 1980). Ruby is way more complex than Python because there's a bajillion different ways to do it.
To me the only point of learning Ruby is if you're already in a job that maintains a Rails app.
The battle for the supreme interpreted language isn't over, but, like Perl, it's my humble opinion that you can count Ruby out.
[+] [-] nickstefan12|8 years ago|reply
Maybe a better tact at why JavaScript first: people are far more likely to hire junior front end people than junior backend.
[+] [-] WillyOnWheels|8 years ago|reply
news.ycombinator.com and its various tentacles runs on Ruby and Arc
[+] [-] awefpoij|8 years ago|reply
[deleted]
[+] [-] CoffeeOnWrite|8 years ago|reply
Anecdote: I hired an Odin Project "graduate" in early 2015, somebody who had gotten a CS degree 10 years earlier but never done anything with it. The Odin Project had prepared him to hit the ground running on modern web software development, and also prepared him for evaluation for our job, with an impressive capstone project. He was a successful hire without a doubt.
[+] [-] Double_a_92|8 years ago|reply
[+] [-] rolae|8 years ago|reply
- When doing my first lessons on ruby you are asked to read several tutorials. I thought, well I already learned that, but in every article I managed to find something new.
- It uses a multitude of other learning sources, does not even try to cover too much themselves. So you get to learn in very different ways. Reading good articles, watching some talks, downloading a repo where you need to write the code to make the test run successfully. Overall I feel, I get the best content, not because they write the best content (who could do that for all the subjects?), but it points you to great content.
- Contrary to many online tools, it forces you to work on your own system, which is a good thing.
- It often forces you to define the problem you are solving yourself. Many online courses make it too easy, you just learn coding. You don't learn to structure the problem.
- It also tries to give you a solid programming knowledge before going into web development. I really appreciate that. It's so easy to learn some angular or vue.js, then you... just need to fetch some data, ah how do I store data, oh and authentication and authorization, oh and... and quickly you get lost. I think it's is very beneficial to first get some solid programming knowledge before diving into the whole server / db / frontend stack.
So I can highly recommend this approach. BTW: even the creators are thinking of driving the course more towards JS (https://github.com/TheOdinProject/curriculum/issues/5633)
edit: formatting
[+] [-] ceautery|8 years ago|reply
"they've been totally in control of the process until now and they've probably dragged their feet because they can (who knows, an even better developer might show up, right?)."
I don't care about the which-language-is-best-to-start-with debate that is being argued in full force here. If you want to rails, knock yourself out. If you want to JS, woo! JS!. I care a lot about seeing your potential employer as an antagonist. They have just indicated to you that they like you enough to invite you to join them. Negotiate, sure, but assume good faith. And the very idea that they were waiting for a better candidate who didn't show up undervalues you. YOU were the one that impressed them most. How well you code was only a part of their choice. They liked your personality best, too, and your honesty, and your dedication, and that indefinable other thing that's hard to quantify.
They are likely the good guys, and they see you the same way. Now go ask for a better salary, or more vacation, but don't assume the worst.
[+] [-] snowcrshd|8 years ago|reply
Apparently Viking Code School has both Ruby and JS separate tracks (I may be misremembering, though)
[1] https://www.vikingcodeschool.com
[+] [-] KevinMul|8 years ago|reply
Erik the original creator of The Odin Project, has moved on to focus on Viking. But theres a bunch of us working on improving the project.
[+] [-] weston|8 years ago|reply
[+] [-] scyclow|8 years ago|reply
[+] [-] KevinMul|8 years ago|reply
[+] [-] gkop|8 years ago|reply
[+] [-] wyqydsyq|8 years ago|reply
Teach beginners backend JavaScript with Node.js. It's not a matter of personal preference, JavaScript is objectively easier for beginners to learn and utilise for backend programming because arbitrarily introducing another language when they already know front-end JS increases cognitive load for no benefit.
[+] [-] bdcravens|8 years ago|reply
[+] [-] srikz|8 years ago|reply
[+] [-] peternicky|8 years ago|reply
[+] [-] olegious|8 years ago|reply
[+] [-] hackermailman|8 years ago|reply
There's also this Java/Typescript curriculum https://www.edx.org/micromasters/software-development
[+] [-] unclebucknasty|8 years ago|reply
[+] [-] tempodox|8 years ago|reply