{"componentChunkName":"component---node-modules-gatsby-theme-medium-to-own-blog-src-templates-blog-post-js","path":"/10-good-reasons-to-switch-to-ruby/","result":{"data":{"site":{"siteMetadata":{"siteUrl":"https://javame.netlify.app","githubUrl":"https://github.com/aterreno/blog"}},"mdx":{"fields":{"slug":"/10-good-reasons-to-switch-to-ruby/"},"excerpt":"I’ve been working for three months with ruby now, I feel like I need to write down a list of the top 10 things I loved about the language…","timeToRead":1,"frontmatter":{"title":"10 good reasons to switch to Ruby","description":"","categories":[],"date":"September 03, 2010","canonical_link":"https://javame.netlify.app//10-good-reasons-to-switch-to-ruby-cf557e936c7f"},"body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"10 good reasons to switch to Ruby\",\n  \"description\": \"\",\n  \"date\": \"2010-09-03T00:00:00.000Z\",\n  \"categories\": [],\n  \"published\": true,\n  \"canonical_link\": \"https://javame.netlify.app//10-good-reasons-to-switch-to-ruby-cf557e936c7f\",\n  \"redirect_from\": [\"/10-good-reasons-to-switch-to-ruby-cf557e936c7f\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"I\\u2019ve been working for three months with ruby now, I feel like I need to write down a list of the top 10 things I loved about the language.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Writing ruby code is a pleasure\")), mdx(\"p\", null, \"Before switching to ruby I did lost my interest in writing software, I was totally bored of writing lots of boiler template patterns stuff, lots of lines of code, maintaining huge deployment scripts, build files. With ruby I rediscovered the passion for writing software, the syntax is just awesome and very rich: tasks that may require a lot of ugly silly code in java/c# can be written in a very expressive form in a line.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Deployment\")), mdx(\"p\", null, \"Capistrano is just magically wonderful, it gives you for free so many features that are missed in the not ruby world, you can be up and running with a Capistrano deploy script in minutes, deploy is safe, predictable, repeatable.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Available libraries and dependency management\")), mdx(\"p\", null, \"Gems are just the best system for dependency management I ever seen, and the gems that are generally popular for ruby are definitely powerful.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Write less, do more\")), mdx(\"p\", null, \"With ruby you write less code, less code means less maintenance, code more readable, less tests to write, less tests to maintain, you will go live quicker.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Quicker development cycle\")), mdx(\"p\", null, \"An obvious consequence of all the other points listed in this blog post but also, since the language is dynamic you won\\u2019t wait for compilation or to reload the application in your server.\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"No XML, really no XML\")), mdx(\"p\", null, \"No more XML, what a win\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"No (n)ant\")), mdx(\"p\", null, \"There must have been a day where ant has been good but I can\\u2019t remember when it was. Ant scripts are a pain to maintain and write, it\\u2019s one of the biggest fail of the Apache Foundation (Maven is another big fail)\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"Micro-frameworks\")), mdx(\"p\", null, \"Another big difference with the usual C#/Java world is that you don\\u2019t get huge beasts frameworks like what it is Spring now, gems (a part from Rails) are usually quite small and they just do the job they are supposed to do.\"), mdx(\"p\", null, \"To mention few: \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"http://www.sinatrarb.com/\",\n    \"target\": \"_blank\",\n    \"rel\": \"nofollow noopener noreferrer\"\n  }), \"Sinatra\"), \", \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"http://haml-lang.com/\",\n    \"target\": \"_blank\",\n    \"rel\": \"nofollow noopener noreferrer\"\n  }), \"Haml\"), \", \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"http://github.com/mongodb/mongo-ruby-driver\",\n    \"target\": \"_blank\",\n    \"rel\": \"nofollow noopener noreferrer\"\n  }), \"Mongo\"), \"\\u2026\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"It\\u2019s dynamic\"), mdx(\"br\", {\n    parentName: \"p\"\n  }), \"\\n\", \"See \", mdx(\"a\", _extends({\n    parentName: \"p\"\n  }, {\n    \"href\": \"http://steve-yegge.blogspot.com/2008/05/dynamic-languages-strike-back.html\",\n    \"target\": \"_blank\",\n    \"rel\": \"nofollow noopener noreferrer\"\n  }), \"this quite long blog post\"), \".\"), mdx(\"p\", null, mdx(\"strong\", {\n    parentName: \"p\"\n  }, \"You\\u2019ll be faster, it\\u2019s guaranteed\")));\n}\n;\nMDXContent.isMDXComponent = true;"},"allWebMentionEntry":{"nodes":[]}},"pageContext":{"id":"27002499-dc3e-538a-a322-86fb302afbb5","previous":{"id":"6dae68bc-f17f-5db5-82a3-61b0d0095894","fields":{"slug":"/i-prefer-small-monitors-over-big-monitors/","published":true},"frontmatter":{"redirect_from":["/i-prefer-small-monitors-over-big-monitors-7843add0f3f1"],"redirect_to":null,"title":"I prefer small monitors over big monitors"}},"next":{"id":"0ffba840-7b2b-5190-8f80-9454464d156c","fields":{"slug":"/wanna-go-fast-reduce-your-feedback-loops/","published":true},"frontmatter":{"redirect_from":["/wanna-go-fast-reduce-your-feedback-loops-ced8be8b8edf"],"redirect_to":null,"title":"wanna go fast? reduce your feedback loops"}},"permalink":"https://javame.netlify.app/10-good-reasons-to-switch-to-ruby/","themeOptions":{"plugins":[],"config":{"title":"Antonio Terreno","description":"Antonio Terreno's blog archive","shortBio":"","bio":"Principal Consultant at Equal Experts","author":"Antonio Terreno","githubUrl":"https://github.com/aterreno/blog","siteUrl":"https://javame.netlify.app/","social":{"twitter":"javame","medium":"","facebook":"","github":"aterreno","linkedin":"antonioterreno","instagram":"tritonitri"},"goatCounterCode":null}}}},"staticQueryHashes":["4131332129","645483741"]}