Course Details
This elective course offers students an opportunity to learn functional programming principles using the Elixir programming language. Additionally, it provides an in-depth exploration of state of the art web development, both on the frontend and backend, using the Phoenix MVC framework and TailwindCSS.
- Class Room: Dana 325
- Class Time: MWF 10:00 - 10:50 am
- Instructor: Alexander Fuchsberger, PhD. MA. MS. (please just call me Alex)
- Office Hour: Dana 338 Book Appointment
Course Topics
- Introduction to functional programming paradigms
- Elixir syntax and data types
- Error and exception handling and coverage testing in Elixir
- Introduction to web development with Phoenix framework
- Building RESTful APIs with Phoenix
- Implementing real-time communication in web applications
- Validating and saving user input through forms and PostgreSQL database
- Front-End UI Design and interactivity using TailwindCSS and Phoenix LiveView
- Front-End UI Design with mobile-first, accessibility and User Experience (UX) in mind
- Usage of industry-grade project management strategies such as issue tracking and git
- Deployment via Cloud based services and Bucknell Network
Please see the schedule for a more detailed list of topics. Topics and topic order are subject to change throughout the semester.
Grading Rubric
- Assignments
80%240 points - Final Project
20%60 points
Assignments
- Every assignment has objectives that are worth 7 points, and it is due at 8 AM one week from the introduction day. In case of a break this transfers to the same weekday after the break ends.
- Your instructor will grade most assignments on your live website.
- Early semester Elixir assignments on exercism are checked for completion on exercism.org, for which you will need to create an account and be able to prove it's your account.
- Completed assignments on localhost will not be considered/allowed.
- It's the students responsibility to always keep the production server in a perfectly working state as grading may not always happen the minute it was due.
- I have tried to make all objectives binary. It's either fulfilled or not. There are no partial credits.
Engagement / Participation
The flipped classroom modality makes it imperative that you attend classes and actively work with your partner. To help enforce this, a participation grade will be subtracted from your assignment grade.
-
Every lecture, you will receive a participation grade from your partner or me, ranging from -2 to 0.
-2: Given if you don't show up to class. This is non-negotiable and includes reasons that are not your fault, such as getting sick, being invited to dinner by the president, or almost dying in a car accident. The only exception is if I receive an official absense notice from the dean's office. During the period this note is in effect, you will receive a participation grade of0instead of-2if you don't attend class.-1: Given if you were discouraging to work with, haven't watched the required video lectures before class, weren't engaging or helpful to your partner in class, came late, or left early, or came to class with some or all of the objectives already completed.0: Given if you were helpful, or at least tried to be helpful or if you had no partner during that lecture.
-
I will enable participation grading approximately 10 minutes before lecture end and close it at lecture end. During that time you are expected to get your partner's participation grade in.
-
If you are missing class you should not touch your partners or your own participation grade (the professor will enter those).
-
If you forgot to enter a participation grade at the end of the lecture you or your partner should let me know by the end of the day otherwise i will assume a
0grade. "Forgetting" to enter a grade should be the exception, not the rule. -
You can't receive less than 0 points for a given lecture.
Final Project
The last 4 sessions in the semester will be dedicated to the final project with no new content introduced or assignments posted. While you should probably start working on your final project before then this should give ample opportunity to ask your instructor and peers for questions. Every student needs to submit their own final project.
The Grading Rubric can be found here.
Course Policies
Seatmap
Every student is assigned a letter that he/she will keep for the remainder of the semester. This letter determines website url among other things but most importantly it is used to determine a student's seat assignment during each class.
Make sure you always sit on your allocated seat (which changes every lecture). This is important because a majority of grading depends on peer grading and a healthy variety of partners.
Also familiarize yourself with today's seat assignment before coming to class to ensure a smooth start into the lecture.
Semester flow
To truly grasp the implications of working on a full-scale application, every assignment throughout the semester builds towards a bigger goal—a fully interactive, professional web application that you develop on your own and can be proud of. At the end, you will select the components that suit your needs and package them into a consistent and comprehensive application. Part of the final project involves cleaning up, catching up on testing, and hiding or removing unused components. While the entire last week of the semester is dedicated to finalizing your project, 90% of the work on it happens throughout the semester.
Except for the first and last week, every lecture in the semester will follow the same flow:
Before the Lecture
- Watch the assigned videos and read the materials.
- Complete the assigned homework.
- Figure out and remember where you will be sitting next lecture
Lecture
- Find your assigned seat and partner.
- Work on the homework assigned for the next lecture together with your partner.
- Grade your partner's participation (~1 minute).
In the last 4 sessions of the semester, no new lecture content or homework will be introduced, and the lecture time will be solely dedicated to completing your final project.
As you can see, we will heavily utilize a flipped classroom style. It is crucial that you come prepared by watching the videos and reading the materials.
It is also paramount that you do not work ahead on current or future assignments, as this could leave your partner stranded. If you are eager to learn more and do extra work, there is always progress to be made on your final project by improving or further developing the components you’ve already worked on in previous assignments.
In fact, I never want to see anyone leaving the classroom early because they’ve completed the next homework during class. Instead, use that time to build towards your final project, help your partner catch up, or find another way to make yourself useful.
Throughout the lecture, I will be moving around, trying to answer your questions or provide further explanations and clarifications for concepts already covered in the videos or assigned readings.
But keep in mind that you strife to earn a good participation grade which gives some opportunity here. I encourage you discuss problems that arise with your partner and/or AI, especially if the instructor is currently occupied helping other students.
Grade Change Requests
If you feel you were incorrectly graded, I encourage you to speak with me. I will not penalize you if I missed something important that warrants a grade change. Incorrect grading can be resolved. However, keep in mind that the project will evolve over the semester, and you may inadvertently change or remove code for older assignments.
Therefore, I accept grade change requests for homework objectives only up to a week after they were due, and only if you book an appointment during office hours and visit me in person or bring forward the issue during a regular lecture. I will not review any requests sent via email, as it requires a back-and-forth dialogue, and email is not the ideal communication tool for that.
You may also use this opportunity to improve on an assignment that you simply didn’t have time to complete before the due date, up to 3 times during the semester. I won’t judge or question why you had a tough week. If you put in the effort to complete the assignment, book an appointment, or show me your completed work in class, I will reward your effort accordingly.
I do not accept grade change requests for participation grades. Your participation grade was determined by your partner, and I have no way of remembering or judging if their evaluation was valid. I encourage you to ask the person for feedback so you can improve your participation grade for future lectures. The only cases that should be brought to me are:
- You received a participation or objectives grade from someone who wasn’t in class.
- You received a
-2on your participation grade even though you were in class.
For those cases, talk to me immediately after class, not later (I will likely forget whether you were in class or not by afternoon).
Keeping Your Git Repository Up to Date
To ensure completion by the due date, you are expected to keep your repository up-to-date and pushed by the due date and time. Having the website up-to-date on Linux-remote but outdated on GitHub will invalidate any claims regarding regrade requests if the code is outdated by more than a week.
Using the deploy script to push your code base to the production server should automatically update your git repository.
AI Use and Sharing Code Policy
While you are encouraged to work with AI, you are also encouraged to collaborate with your peers inside and outside the classroom. I hope that you will actively discuss code and strategies for solving the objectives.
However, what absolutely upsets me is if students simply share your code/solutions in a passive and unidirectional way, perhaps shortly before something is due. Do not allow anyone to trick you into giving them direct access to your codebase. Working side-by-side in and out of classroom especially with your partner is okay and encouraged. If I see the same or too similar code/output on your web application and deduce this was plagiarism as described in the previous sentence, I will refer the case to the board of academic misconduct.
For your own sake, you are encouraged to provide links in your code comments to where you retrieved information (so you can later look it up again), but there will be no penalties for not citing code or whether it was AI-produced or not.
Professionalism
Ensure your phones are silenced, and never be even a minute late for class or leave early. Be polite, patient, and professional towards your peers and professor inside and outside the classroom.
Consider using a mouth freshener before class as you will be talking to a partner next to you a lot. Do not bring food to the lecture.
Bring your headphones in case you need to rewatch video material, but do not have them on when you are not actively watching a class video so your partner can communicate with you.
Joining Late to the Course
I accept late joiners during the first (no restrictions) and second (with dean's permission) week of the semester according to official regulations. In the rare event that someone joins the course late, all previous objective points can be earned by completing the assignments within one week of the official join date (as shown on BannerWeb). Participation points will be set to 0 for all missed assignments.
Academic Responsibility
One of the most important aspects of this course is that it is set up to emphasize the development of your self-reliance and independent learning skills. There will be many occasions in which you will need to stretch yourself to find an answer to a programming or research problem. This will require that you use wisely the resources available to you on the web and through your peers and the instructor. Courses at Bucknell that receive one unit of academic credit have a minimum expectation of 12 hours per week of student academic engagement. Student academic engagement includes both the hours of direct faculty instruction (or its equivalent) and the hours spent on out of class student work. If you make sure to account for this time in your weekly schedule, you will certainly learn a lot in this class and the grades you earn will reflect that.
Accessibility
If a student needs to sit in a specific seat throughout the semester for accessibility reasons please do let me know at the beginning of the semester so i can program the website to not randomly switch your seat at each lecture.
Any student who needs an accommodation based on the impact of a disability should contact the OAR at oar@bucknell.edu; 570-577-1188 or complete the Disability Accommodation Request form. The OAR will coordinate reasonable accommodations for students with documented disabilities.
If you have a disability and think you may need an accommodation, I encourage you to contact the OAR. The OAR is here to help and will work with you to determine appropriate accommodations. If accommodations are needed, the OAR will communicate those to me through a Letter of Accommodation. I will not be given information about the nature of your disability, only the accommodations you need. I will treat any information I receive as private and confidential. Please visit https://www.bucknell.edu/life-bucknell/diversity-equity-inclusion/accessibility-resources for more information about the OAR.
Student Athletes
If you are a student-athlete, remember that you are a student first and an athlete second. This means that academic work is your first priority. As per University rules, you will not be penalized for being away to take part in athletic events. It is your responsibility, however, to manage your time wisely so that you can do well in this and in your other classes. Please make sure to notify me well in advance of your travel schedule and to work out a make up schedule for activities.
Course Philosophy
I have spent quite some time contemplating how to streamline and convey information that took me years as a hobbyist to accumulate in a way that prepares you most effectively for the job market within a single semester. My goal is that if you successfully complete this course and manage to convey your new skill set during an interview, you will have a good chance of landing any job where the ad reads "Junior Web Developer." Furthermore, you should have an excellent chance of landing jobs that read "Junior Elixir/Phoenix Developer" or something similar.
In this age, it would be foolish not to acknowledge the tremendous potential AI can have on the learning experience. I myself use it constantly as a companion to complete complex functions, substitute the need to look up something I already know in the documentation (for a faster development cycle), or let it take control of mundane tasks such as writing tests. Thus, I will not restrict any usage of AI and will maintain a completely open policy. I care about your product, not the means by which you accomplish it, as long as you are not violating any moral or licensing restrictions. I bet my right hand that most companies follow a similar philosophy.
I think there is no better time than now to learn web development properly. Almost every week, new frontend-component libraries are popping up, and the landscape is in constant flux. While the specifics you will learn in this course may quickly morph or even become obsolete in the not-so-distant future, this is the fate of all programming languages—especially in web development. On the bright side, I can promise you that you will learn to adapt quickly, and the patterns you find in this course will appear in other tech stacks. You will never have to start from scratch.
Further, I would like to emphasize the benefit of having a positive attitude towards coding and the willingness to step outside your comfort zone. Forget what you already know about code style, VS Code plugins, or paradigms; keep an open mind. Let me try to convince you of new ways of doing something you may already have experience with. Once you have tried what I suggested, and if you still like your approach better, by all means, don't let me stop you. But give things a genuine try first—that's important. If you don't find joy in facing and overcoming coding challenges, if it's not fun for you to explore and create solutions, then you might be in the wrong course. I'll do my best to support you in your personal journeys and projects as far as my time allows.
With so many of you having good cause and (with one exception) exclusively seniors enrolled, I believe you are mature enough to self-grade the majority of your work in this course. Thus, I will let you validate and grade each other's work, and I will only step in to resolve disagreements and ensure your evaluations are genuine.
Why Elixir/Phoenix?
To the best of my knowledge, this is the first full-stack web development course at an undergraduate university level nationwide to feature the Phoenix/Elixir tech stack. I will elaborate on the reasons behind this choice over other, more mainstream stacks in detail below.
I genuinely believe that you will land your first job and build your career by standing out for being proficient at one thing, not by being an amateur at everything. Once you gain work experience, the necessity to expand your knowledge and adapt will naturally follow.
I have had a passion for web development for about 16 years, and during this time, I have experienced several popular developments in the field. My humble beginnings started with plain HTML and CSS in high school as I attempted to create my own website. I then delved into PHP and content management systems like Joomla, WordPress, and others. For years, I maintained a side gig creating and managing a website for a photography studio in Innsbruck, Austria. I didn’t pick up JavaScript until my first post-undergraduate job as an Online Marketing Manager. At that time, jQuery and Bootstrap were very popular, so my focus shifted heavily in that direction.
Later, a friend introduced me to Phoenix/Elixir. However, at that time, the framework was still in its infancy, and there were few resources available for learning. The learning curve was simply too steep, there was no AI assistance, and I had to give up on it temporarily. I wouldn’t return to it for another three years.
In the interim, I worked on a project for a German role-playing community, equivalent to Dungeons & Dragons. My mission was to implement the ruleset of the game into a browser-based adaptation.
React was becoming popular, but before diving into React, I explored an MVC framework called Sails.js, based on Node.js. I saw the immense potential of using a full-stack framework with sophisticated, reliable, and productive tools under the hood. While the responsiveness of React was impressive, maintaining and syncing it to a backend was a nightmare—especially with a database more complex than simple SQL CRUD (Create, Read, Update, Delete) operations.
This brings me back to Phoenix/Elixir. The slogan on their website literally reads:
Build rich, interactive web applications quickly, with less code and fewer moving parts.
I decided to give Phoenix another try by reimplementing the RPG project using Phoenix, and this time, it clicked. The process was smooth, as a lot had changed since my first attempt. The framework’s documentation and its related libraries were outstanding.
Soon after, LiveView was released, completely revolutionizing frontend development by eliminating much of the need for JavaScript on the frontend, among many other features you will discover in this course.
To conclude, I am not a die-hard fan of Phoenix, blinded by love for the framework. Instead, I have kept an open mind, explored different options, and remained unbiased and open to other developments. The landscape of web development is in constant flux, changing faster than ever before, and it’s possible that in just a few years, something else will take over the market. More reasons will emerge throughout the semester, but for now, I ask you to trust me that Phoenix/Elixir is an excellent choice for a true full-stack experience. This course will cover everything from front-end design to backend database migrations and deployment, providing you with a strong foundation to navigate the vast landscape of web development.