{"id":17093694,"url":"https://github.com/herminiotorres/elixir-and-phoenix-for-beginners","last_synced_at":"2026-04-16T18:01:51.066Z","repository":{"id":144761626,"uuid":"347643056","full_name":"herminiotorres/elixir-and-phoenix-for-beginners","owner":"herminiotorres","description":"the course: Elixir \u0026 Phoenix for Beginners","archived":false,"fork":false,"pushed_at":"2021-04-10T21:29:29.000Z","size":543,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-23T16:44:11.605Z","etag":null,"topics":["course","elixir","elixir-lang","otp","phoenix-framework"],"latest_commit_sha":null,"homepage":"https://www.knowthen.com/elixir-and-phoenix-for-beginners","language":"CSS","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/herminiotorres.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-03-14T13:22:44.000Z","updated_at":"2021-04-10T21:29:31.000Z","dependencies_parsed_at":"2024-07-25T07:46:11.760Z","dependency_job_id":null,"html_url":"https://github.com/herminiotorres/elixir-and-phoenix-for-beginners","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/herminiotorres/elixir-and-phoenix-for-beginners","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/herminiotorres%2Felixir-and-phoenix-for-beginners","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/herminiotorres%2Felixir-and-phoenix-for-beginners/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/herminiotorres%2Felixir-and-phoenix-for-beginners/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/herminiotorres%2Felixir-and-phoenix-for-beginners/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/herminiotorres","download_url":"https://codeload.github.com/herminiotorres/elixir-and-phoenix-for-beginners/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/herminiotorres%2Felixir-and-phoenix-for-beginners/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31897870,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T17:33:00.867Z","status":"ssl_error","status_checked_at":"2026-04-16T17:32:57.401Z","response_time":69,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["course","elixir","elixir-lang","otp","phoenix-framework"],"created_at":"2024-10-14T14:08:01.340Z","updated_at":"2026-04-16T18:01:51.048Z","avatar_url":"https://github.com/herminiotorres.png","language":"CSS","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Companion Repo for the course: Elixir \u0026 Phoenix for Beginners\n\n\u003e \"Use the right tool for the job\"\n\nThe above statement is conventional wisdom that I'm sure most of us programmers\nwould generally agree with, but let me ask you this, do you think each of the 20\nmost popular programming languages are different tools meant for different jobs?\n\nFor example, consider the following five programming languages: Java, Python,\nRuby, JavaScript, and C#.\n\nAre these five languages so unique that you'd call them different tools meant\nfor different jobs or do they seem more alike than they are different?\n\nThere was a time when you could say *\"JavaScript is a language that runs in the\nbrowser\"*, however that statement doesn't work anymore... Today JavaScript is a\nlanguage that you can use almost everywhere: Browsers, Servers, Embedded\nDevices, Databases... So is JavaScript the right tool for every job? **NO, of\ncourse not! but people keep trying**\n\nI think if you squint your eyes, the vast majority of popular programming\nlanguages look more similar than different.  Sure, they all have different\nstyles and idioms, that may or may not resonate with you, but I still think most\npopular languages, fundamentally aren't all that different.\n\n### Why do I think this?\n\nBecause most popular languages were designed to be general-purpose, sequential\nlanguages that can solve all sorts of problems.  I mean, if you think about it,\nlanguages only become popular, when they have broad appeal, and can be used to\nsolve many different problems... right?\n\nBut here's the thing, you can't write a programming language that's excellent at\nsolving all possible problems, just like you'll never be able to make a meal\nthat everyone likes.\n\n### Ok, so what am I getting at?\n\nThis course teaches you the [Elixir programming\nlanguage](https://elixir-lang.org/), which you should know, isn't like any\nother popular languages.\n\nElixir is a modern **concurrent functional** programming language, that solves\ncertain types of problems, in a unique, novel and a very effective way...  In\nother words, Elixir is clearly a different tool, meant for certain types of\njobs.\n\nI'm going to explain what Elixir is really good at in a moment, but before I do,\nponder the following statement:\n\n\u003e Elixir is a language that allows you to write software that can effectively\n\u003e **\"run forever\"**...\n\nOk before you send me a nasty email, nothing runs forever... I know that, but\nprograms written with Elixir can have ridiculous uptimes, far longer than\nany other languages except for Erlang, but I'll talk more about Erlang in a\nmoment.\n\n### So, how is it that Elixir programs can effectively \"run forever\"?\n\nWell, it doesn't happen by accident... this is possible in Elixir because in\npart, that's what it was designed to do.\n\nSo when would you use Elixir? In other words, what kind of **\"problems\"** is it\ngood at solving?\n\nWell, Elixir is excellent for creating **web applications and APIs** that are\nhighly responsive, massively concurrent, fault-tolerant and distributed.\n\nElixir is also really good at creating [embedded\nsoftware](https://nerves-project.org/), but in this course, we'll focus on\nElixir, in the context of web development.\n\nOk, you might be thinking, *\"I can create web applications and APIs in plenty of\nlanguages, so how's Elixir different?\"*\n\nIf I had to give just one answer to this question, my answer would be: **\"Elixir\nhandles concurrency far better than any other popular language!\"**\n\nI'll give you some examples:\n\nA few years ago [B/R (Bleacher Report)](https://bleacherreport.com/), a sports\nnews site, was experiencing significant growth (billions of monthly page views)\nand was running into scaling issues. B/R was originally created with **ROR (Ruby\non Rails)**, which offers a great developer experience and productivity, but it\nkind of sucks at scaling and concurrency.\n\nSome companies have been able to scale ROR, by effective use of caching, but\ncaching isn't something B/R could use, because each B/R user has a personalized\nnews feed, which doesn't lend itself to caching.\n\nInitially, B/R dealt with their growth challenges, by adding more and more\nservers, but eventually they decided to look at alternatives to ROR, that could\nhelp them address their scaling challenges, so they looked at a few different\nlanguages such as JavaScript/Node.js and Golang, but they eventually chose\nElixir, and they started migrating from ROR to Elixir \u0026\n[Phoenix](https://phoenixframework.org/).\n\nAfter migrating the resource-intensive services from ROR to Elixir, B/R was able\nto go from 150 ROR servers, down to just [5 Elixir\nservers](https://www.techworld.com/apps-wearables/how-elixir-helped-bleacher-report-handle-8x-more-traffic-3653957/),\nand they felt like they could have gone down to just 2 Elixir servers, but they\nwere extra cautious and they preferred to over-provisioning a bit.\n\nGoing from 150 to just 5 servers is pretty impressive, but there's more to\nElixir than just scaling, but I'll get to that in a moment.\n\nLet's look at another Elixir success story in [Discord](https://discordapp.com/)\nwhich is a startup that provides a text chat and voice service for gamers.\n\nDiscord knew from the very beginning, that they'd need to build a highly\nconcurrent system and they boldly chose Elixir from the start... I say *boldly*\nbecause they committed to Elixir very early, well before it was a proven\ntechnology.\n\nAfter about 2 years of service, Discord was servicing [5 million concurrent\nusers](https://blog.discordapp.com/scaling-elixir-f9b8e1e7c29b), then a couple\nyears later, they were servicing [11 million concurrent\nusers](https://blog.discordapp.com/using-rust-to-scale-elixir-for-11-million-concurrent-users-c6f19fc029d3).\n\nNow, Discord is at a scale most of us will never have to deal with, and as such,\nthey've found several hot spots in their code that required creative solutions,\nbut they've been able to make it work quite well, and here's the **kicker**,\nwhen they had 5 million concurrent users, they only had **4 infrastructure\nengineers**.\n\nOk, you might be saying to yourself *\"I don't have scaling challenges like B/R\nand Discord, so why would I use Elixir\"*?\n\nWell, even if you don't have scaling challenges today, it's nice to know you're\ncreating software that can scale when needed, but even if you never need the\nmassive concurrency that Elixir offers, you should still consider Elixir for a\nbunch of other reasons. I'll describe a few of the big ones:\n\n- **Concurrency**: because of how concurrency is handled with Elixir, there are\n    features you get in Elixir that other languages can't offer. For example,\n    implementing **real-time** features in Elixir and Phoenix is trivial,\n    especially compared to other popular languages.\n\n- **Responsiveness**: Elixir is very responsive and offers **consistent\n    low-latency responses** because of features like preemptive scheduling and\n    how garbage collection is implemented... in other words, with Elixir you'll be\n    able to offer more *consistent, stable and reliable services*.\n\n- **Availability**: it's relatively easy to create **highly available services**\n    with Elixir because distributed computing/clustering is a native feature.\n\n- **Fault-tolerance**: because of how fault-tolerance works in Elixir, *errors and\n    bugs are isolated* and typically have no impact on other parts of the\n    system. In other words, it's virtually impossible to have bugs that take\n    down your whole server, and with Elixir, you won't find yourself restarting\n    servers to recover from bad errors or bugs.\n\nBy the way, if you wanted to write software that could **\"run forever\"**, you'd\nneed all the features I just described, right?\n\nElixir is a very capable language that offers many unique and interesting\nfeatures, but it also offers an excellent developer experience, similar to what\nRuby on Rails offers... Basically, with Elixir you can create excellent systems,\nwith unique features, that scale well and are maintainable, and you'll find\nyourself very productive and you'll probably really enjoy using it.\n\n### \"Ok, but Elixir is young, so I'm sure there are plenty of growing pains you'll need to endure, right?\"\n\nWell **no**, not exactly, let me explain.\n\nPrograms you write in Elixir, are compiled into bytecode that runs in a virtual\nmachine. The virtual machine that Elixir uses wasn't created for Elixir, it was\noriginally created over 3 decades ago for a language called Erlang.\n\nThe truth is, Elixir is nothing without the Erlang Virtual Machine, in fact\nElixir wouldn't even exist, without Erlang.\n\nNow, Erlang has most of the same features that Elixir has, which might make you\nwonder, why not just use Erlang?\n\nWell, if you look at Erlang, it isn't the nicest language to read and use...\nIn fairness, most languages that were created over 3 decades ago, can't really\ncompete aesthetically with modern languages. Now, some people actually like\nErlang, but I suspect most people who take a cursory look at Erlang are quickly\nturned off by it's syntax.\n\nThe reason I'm telling you about Erlang is because its virtual machine (which\nElixir uses) is mature, battle-tested and rock-solid, so even though Elixir is a\nrelatively new language, it's runtime is more mature and proven than pretty much\nevery other runtime.\n\n### \"Ok, but what about changes to the language and the APIs? Are they stable?\"\n\nRecently, [José Valim](https://twitter.com/josevalim), the creator of Elixir,\nwas asked:\n\n\u003e [\"Is Elixir done?\"](https://elixirforum.com/t/is-elixir-done/20830/12)\n\nJosé's answer was effectively **Yes**... well he didn't say yes, he preferred to\ncall it stable... Basically, there are no big features or breaking changes on\nthe roadmap, and there are no firm plans for a version 2.0...  well, I bet there\nwill be a version 2.0 at some point, but hopefully, you get the sentiment, about\nthe **maturity of the language**.\n\nI'm pretty sure we're past most of the growing pains with Elixir, and it's a\ngreat time to learn and start using Elixir, but don't take my word for it,\nlook at what others are saying, like\n[InfoQ](https://www.infoq.com/articles/programming-language-trends-2019/) and\nGartner Research, who say it's ready for\n[prime-time](https://dockyard.com/blog/2019/04/19/business-benefits-of-elixir)\nand they're suggesting that organizations start considering Elixir because it\ncan provide a competitive advantage.\n\n### \"Do many companies use Elixir? i.e. are there many Elixir Jobs?\"\n\nYep, you can find hundreds of companies that use Elixir, in this\n[list](http://elixir-companies.com/), but I suspect there are actually thousands\nof companies using Elixir, with more adopting it every day... You're probably\nfamiliar with some of the companies that use Elixir, such as Pinterest, Moz,\nSlack, Pepsi, PagerDuty, AdRoll, Bleacher Report, and  Discord.\n\n### \"What will I learn in this course?\"\n\nWe'll start with the basics, and work our way through the major features in\nElixir, then we'll start learning the Phoenix web framework.\n\nThere are more than **150 videos, totaling ~17.5 hours** of video content that\ncovers the following topics, and much more:\n\n- Data Types\n- Pattern matching\n- Flow Control\n    - If/Then, Unless\n    - Cond\n    - Case\n- Functions\n  - Anonymous and Named\n  - Higher Order Functions\n  - Pattern matching \u0026 Guards\n  - Pure vs Impure\n  - Pipe Operator\n  - Recursion\n  - Tail Call Optimization\n- Collection Processing\n  - Map, Filter, Reduce, etc\n  - Composition with the pipe operator\n  - Streams\n  - Comprehensions\n- Protocols\n- Macros\n- Build tools\n- Testing\n- Functional Programming Concepts\n- Processes\n  - Long-Lived \u0026 Short-Lived\n  - Sending and Receiving Messages\n  - Error Handling\n  - Supervisors\n- OTP\n  - GenServers\n  - Supervisors\n  - Applications\n  - Agents \u0026 Tasks\n- Phoenix Web Framework\n\nAfter you've learned the basics, you'll put what you've learned into practice\nby building an interesting final project.\n\n### \"What's the final project?\"\n\nImagine that you and I are on a team that just landed a big contract to **build\nan exit polling application**.\n\n**\"What is exit polling?\"**\n\nWell, it's a way of estimating how people are voting on election day, and the\nestimates are determined by asking a sampling of voters who they voted for,\nimmediately after they leave the polling booth.\n\nThis project is a **bit scary**, because, before election day almost nobody will\nbe using our application, however, on election day, our app will experience a\n**massive spike in usage**... somewhere between 10,000 to 100,000 concurrent\nusers.\n\nLet me explain the expected usage pattern, in more detail.\n\nLeading up to election day, there will be just a few users, setting up the\nmaster data... In other words, adding the voting districts, the questions to ask\nvoters, and the valid choices for each question.\n\n  ![master data example](https://knowthen.com/images/elixir_exit_poll_master-data.png)\n\nOn election day, there will be a huge spike in usage. A small part of the usage\nspike will be from people conducting the exit polls, on their mobile phones.\n\n  ![Polling page example](https://knowthen.com/images/elixir_exit_poll_poll.png)\n\nHowever, the vast majority of concurrent users will be pollsters, political\ncampaigns and news organizations that will be monitoring the exit polling\nresults all-day long.\n\n  ![Exit poll result page - updated in\n  real-time](https://knowthen.com/images/elixir_exit_poll_results.png)\n\nSo basically, there will be 3 parts to our final project:\n1. An admin area for adding and maintaining master data.\n2. A polling section, which will be used to conduct exit polls.\n3. And lastly, there will be a reporting section, which displays the exit\n   polling results and **updates them in real-time**, as new polls are\n   conducted.\n\nThe admin part of the app will consist of several server-rendered crud pages.\n\nThe Polling and Reporting parts of the app will be a single page app, written in\nReact.js.  We **won't** create the React app in this course, as it's outside the\nscope of this course, but we will create several **rest endpoints** and a\n**phoenix channel** that will get used in the React.js app, then we'll integrate\nthe React app with Phoenix.\n\n### \"How do you solve this type of concurrency/scaling challenge?\"\n\nWell, you're going to need to take the course to find out, but just so you know,\nthe solution we'll create is very different from what you'd do in other popular\nlanguages.\n\n### \"Is this course right for me?\"\n\nThis course is meant for students who are already familiar with HTML, CSS, and\nHTTP.\n\nIdeally, you should have some experience with another programming language...\nIn other words, I'm assuming you have at least a small amount of general\nprogramming knowledge.\nThis isn't to say a total newbie can't succeed in this course, but I think it\nwould be pretty challenging.\n\n### \"What's included in this course?\"\n\nThis course has **150+ videos**, totaling **~17.5 hours**, of thoughtfully\ncreated content covering Elixir version 1.9 and Phoenix version 1.4. You'll also\nhave plenty of **exercises and challenges** throughout the course, to give you\nsome practice and to keep you engaged.\n\n### Course Preview\n\nYou can watch the [first few\nvideos](https://courses.knowthen.com/p/elixir-and-phoenix-for-beginners) to\nsee what we'll be covering, and to get a bit of an overview.\n\n### \"What if I don't like the course?\"\n\nI offer a **no questions asked, 30-day money-back guarantee**. So, if for any\nreason, you'd like a refund, just shoot me an [email](mailto:james@knowthen.com)\nwithin 30 days of your purchase, and I'll promptly provide a refund.\n\n\u003cp class=\"mv4\"\u003e\u003ca\nhref=\"https://courses.knowthen.com/purchase?product_id=1385008\" class=\"f3 link\ndim ph4 pv3 mv7 white bg-blue\"\u003eBuy Now\u003c/a\u003e\u003c/p\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fherminiotorres%2Felixir-and-phoenix-for-beginners","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fherminiotorres%2Felixir-and-phoenix-for-beginners","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fherminiotorres%2Felixir-and-phoenix-for-beginners/lists"}