Many adults and even some fresh high school graduates are increasingly interested in higher education that can be achieved using 100% online resources. People need to start or continue working, but they also want to gain a valuable education. Online programs are a natural way to go due to their flexibility; they allow you to do school-related work around all the other responsibilities an adult must manage. I went through this process, and I was weary of the scams out there with for-profit institutions pumping out degrees for the right price. I wanted a true education; I wanted to learn technical skills and have a reputable university on my résumé.
This is what ultimately led me to Arizona State’s BS in Software Engineering. I thought it might be useful to others that may be curious about what it’s like to complete a degree 100% online. I’ll outline the courses I took, what they consisted of, and comment on some other general aspects of being an online student. But before I do this, I need to provide a little background; feel free to scroll down to the specifics if you’re in a hurry for specific information.
Course Schedule Overview
When I joined the military, I had a goal in mind: make a living, gain some useful skills, and finish my college education before detaching. All of my friends, my family, and people in the media were accumulating huge amounts of student loan debt because our generation was taught that in order to succeed, you need to obtain a college degree. A combination of being too immature to do well in college and an aversion to the idea of owing somebody $70,000 or more led me to make the decision to enlist.
I spent my first few years focusing on working hard at my job in the Navy so that I could satisfy the “make a living” part of my goal. I knew that after a few years of this, I would be able to transition to shore duty, an ideal, deployment-free environment in which one could begin knocking out college courses. At that time, I knew I was going to pursue something technical, but I also assumed that the best course of action would be to find a program that was relevant to the work I was doing for the military. That way, I could maximize my chances of finding a career as a civilian.
It didn’t take me long to discover Arizona State University’s catalog of online undergraduate programs. I was fascinated that ABET accredited engineering programs were available in this format; my initial target was their BS in Electrical Engineering, as this was vaguely relevant to the technical work I did for the Navy. I was deeply skeptical. How could an online format convey the same quality of information as a traditional brick-and-mortar program? For example, a listed requirement was CHM 113 and CHM 116; these are university-level chemistry courses with labs included. I wasn’t sure how they pulled this off but I also considered the state of technology, this being sometime early in 2016. It didn’t surprise me that online simulators and other applications allowed a quality education from a distance.
After being accepted into ASU’s Fulton Schools of Engineering, I took a few courses with a declared Electrical Engineering major. After one session, I made the decision to shift to the Software Engineering program. I had taken a coding class, CSE 110 – Principles of Programming, and I was fascinated by the field. Thus began my journey of learning software engineering, 100% online, while fulfilling my duties in the military as well as my other responsibilities. Here are the courses I took in order to complete the program and my experience with each of them.
Note: I had finished some general education courses at a community college near ASU, Rio Salado College, knowing they would transfer to ASU when the time came, so I won’t be covering those courses.
Arizona State’s Course Schedule
The program divided each semester (Fall, Spring, and Summer) into three sessions: A, B, and C. In the Fall and Spring, semesters are divided into two 7.5-week sessions (A and B) and the C session spans the entire semester. Most courses in the program (at the time of my attendance) were only available in A and B sessions, but I recall talk of getting more of them into the C-session format.
The 7.5-week courses can be extremely demanding. You’re taking classes that are generally afforded 15 weeks for covering all the material, except you’re cramming the same content into half the time. This must be considered when you’re putting your schedule together. It sounds impossible up front, but you quickly learn how to manage it. I started off a bit slower and worked my way up to taking 6-9 credits per session for a total of 12-18 credits per semester.
Summer sessions are designed the same way, but the courses are even shorter. Summer A and B are 6.5 weeks, C session is ~8 weeks. Taking harder classes in the Summer isn’t a great idea, but it can be done. For instance, I took MAT 275 – Modern Differential Equations in Summer B.
The only courses that I took that required C sessions were the two capstone courses, SER 401 and SER 402. The nature of these courses are such that you need a lot of time to get the most out of it. You work on the same project, end-to-end, in both classes. I’ll discuss them near the end of this post.
My Courses, From ’17 to ’19
CHM 113 – General Chemistry I – 4 Credits (Lab included)
For the Software Engineering program, you are required to do two semesters of a lab science. I chose chemistry; at the time, I was interested in learning in general, and chemistry seemed like it would be fascinating.
CHM 113 consisted of weekly lectures, some homework on a platform called ALEKS, quizzes, tests, and labs. The normal stuff was pretty standard; you do some reading, watch some lectures, do the homework/quizzes, and prepare for tests.
Testing Online at ASU
This can be a little weird at first: you take your tests at home while being recorded by your webcam. At the time of my attendance, this was a required setup. You had to scan your room with the webcam, show all your materials, show the walls and beneath your desk, etc. You basically had to prove you didn’t have the means for cheating. The videos would pick up on certain things and flag you if necessary. If you are flagged, somebody from the school, generally your instructor, will review the video to see if there’s anything of concern. When you submit your exam, you can terminate the recording session.
Anyways, back to CHM 113. The most significant thing about the labs was that you actually did do labs at home. You had to order a lab kit that had all the materials necessary to do these labs. I’m not sure if they still have this setup or not; the program rapidly evolves, and it was relatively new when I started it.
FSE 100 – Introduction to Engineering – 2 Credits
This class is exactly what it sounds like: it introduces you into thinking like an engineer. You talk about design and the iterative engineering process, you do some creativity-inducing activities, you design shopping carts or desks or some common thing just to get your hands dirty. You do some basic electronics with a bread board and a supplies kit you have to buy (you end up with a lot of extra stuff that you don’t use if you buy the kit).
The primary focus of this course is the culminating team project. When I took the course, my teammates and I had to design and build musical instruments with certain financial constraints in place. Then, we had to play a song from a list of songs provided, play the song on video, and put together the clips with some audio software. It was a pretty interesting experience; people made guitars, xylophones, and more.
In all, this class was way too much work for two credits, but I do think you get some useful thinking skills out of it. And I have heard that newer versions of the class involve some work with Arduino, which would have been pretty cool.
ASU 101 – The ASU Experience – 1 Credit
This class felt like a tremendous waste of time to me, and there is a good chance you can get out of it if you’re transferring in from somewhere else. I heard of others getting out of it, but by the time I found out it was too late. It’s basically a class about how to be successful in college. I won’t go into any more detail than that. I will say that it took very minimal effort to get through with a 4.0.
CHM 116 – General Chemistry II – 4 Credits
This class was more of CHM 113, but with slightly more advanced concepts. There were still labs and the same setup. Read about CHM 113 for more details.
CSE 110 – Principles of Programming – 3 Credits
Finally, the first programming course. I came into this one extremely excited. When I took it, the vehicle for learning program was Java.
I say vehicle for learning because I think it’s important that people understand up front that the language they use does not matter. Programming languages are all very similar. Once you know a language like Java or C++ or Python, you can very easily pick up new ones. Many people get into the program and are very concerned about the languages they teach, but that’s not the emphasis.
CSE 110 used Java to teach basic programming principles: how to use variables, details about the basic data types, very basic object-oriented programming principles, what functions are, basic data structures, all the different types of loops and conditionals, etc. This stuff is the foundation for what’s to come. You want to go forward being able to do this stuff very comfortably.
I have heard that they’re beginning to use Python as the vehicle for learning (because I know some of you still care despite my rant).
HST 318 – History of Engineering – 3 Credits
History of Engineering was a requirement at this time, but I think that may have changed. Anyway, it’s exactly what you’d expect. It takes you through a journey beginning with the first people that we would today call “engineers,” their projects (the Erie Canal in this case), and subsequent endeavors during the Industrial Revolution and beyond. The course itself is lots of reading, writing, and presentations.
MAT 275 – Modern Differential Equations – 3 Credits
Note: I had taken Calculus I and Calculus II at Rio Salado, the local community college I mentioned earlier. They were pre-requisites to this class.
Note: When I went through the program, you had a choice between this class and Calculus III. At the time I was pretty fed up with learning new Calculus.
I made the brilliant decision to take Differential Equations during a hyper-accelerated Summer B session. The instruction expressed his opinion up front that this isn’t considered a great idea by them either. Nonetheless, I was able to get a 4.0 in the class. I was fascinated by the material. I stood watch for the Navy and was lucky enough to be allowed to study during watch at night, so I was reading about Hooke’s Law and calculating positions of springs relative to other changing quantities and it was a great time. Do I remember any of it now, in 2019, working as a full-time software engineer? Nope.
CSE 205 – Object-Oriented Programming & Data Structures – 3 Credits
This class was a natural progression from CSE 110. It still used Java as the learning vehicle. You get to implement linked lists, stacks, queues, and learn how object-oriented programming works. You implement classes and explore inheritance and polymorphism. In general, you learn some of the more advanced concepts around writing software in general. There weren’t any major projects; just weekly lectures, quizzes, and labs.
MAT 243 – Discrete Math Structures – 3 Credits
I’ll begin with this: this is one of the hardest courses in the program, and justifiably so. This is a weird math class; it isn’t like other math classes you’re likely to have taken. It really isn’t its own math topic. It’s more of a compilation of bits of math from various mathematical areas of study that are relevant to computer science. You learn about sets, relations, propositional logic, graphs, number theory, etc. This is important stuff if you want to do well in data structures and algorithms, a vital skill for software engineering interviews.
Some of it goes a little far in my opinion; I wasn’t a huge fan of writing mathematical proofs, but it does get your head in the right mindset for programmatic thinking.
SER 215 – Sofware Enterprise: Personal Software Processes – 3 Credits
I won’t go into detail about this course. To my knowledge it is no longer offered and was merged with SER 216, which I’ll discuss later.
SER 222 – Data Structures and Algorithms – 3 Credits
This is one of the most important courses in the program. I emphasize that because the skills you learn here are the skills tested in those scary software engineering whiteboard interviews I’m sure you’ve heard about. Now, I’m not saying that these skills should be emphasized in interviews or that you use these skills every day in the life of a programmer, but the reality is that it’s how you get many jobs in this field. Some companies are developing more modern approaches to candidate evaluation, but testing your data structures and algorithms remains the bread and butter of many companies, especially in tech.
This class is where you get to learn about algorithmic complexity (Big-O analysis) and implement well-known algorithms such as binary search, quicksort, merge sort, and others. You’ll also implement well-known data structures such as trees, linked lists, and more. These are done in weekly labs that are very challenging, but also very fun. If you end up hating it, don’t worry. There are courses coming up that allow you to learn and do the more practical things associated with this line of work.
But my big tip is this: do this class, take it seriously, learn it well, and continue practicing the skills until you land a job. I’ll write another post about the best ways to learn and maintain skills soon.
SER 232 – Systems Fundamentals I – 3 Credits
This class is all about designing very low-level systems using fundamental structures such as AND and OR gates. It’s mostly a pretty easy class that culminates in building a basic calculator application by wiring up these gates and multiplexors in a simulator. This class might be more useful if you end up doing some very low-level programming in the future, but even then you’ll probably be using a language that’s a few layers of abstraction higher than AND gates.
This was the first semester in which I decided taking 18 credits while working full-time would be a cool idea. I was miserable and don’t recommend it, but again, I did it and it is doable. My goal was to finish before leaving the military so I had a strict timeline. My adviser strongly discouraged it. Here we go.
CSE 230 – Computer Organization/Assembly Language Programming – 3 Credits
This class teaches you about what code looks like right before it all becomes 1s and 0s. It’s very low-level stuff (when I say low level, the bottom in this context would be the hardware itself, and the top would be the graphical user interface you click on). The course consists of some quizzes and some projects involving writing Assembly. You don’t do anything too crazy; you’re just making some LEDs on a board light up, among other things. I didn’t love the class, but interestingly it does satisfy a prerequisite for the graduate school program I’m applying for.
SER 315 – Software Enterprise: Design and Process – 3 Credits
The Software Enterprise courses are a long series of material that make up the core of the software engineering program. They are a pipeline of classes that teach you about software development lifecycles, from gathering requirements to designing software, to developing the code, testing the code, and other steps along the way.
SER 315 is all about the processes themselves and different design approaches involve with building enterprise-level software. You don’t actually write any code in this class. Instead, you learn how to represent systems in UML diagrams and other notations. When I took it, the class culminated in a team project. Prepare for many diagrams. Activity diagrams, class diagrams, domain diagrams, use case diagrams, and beyond.
SER 322 – Database Management – 3 Credits
In this class you learn all about relational algebra, SQL, and the basics of database design. I think this class is much different from when I took it; I hear it offers much more practical experience than it did when I took it. For me, half the course was basically writing relational algebra and SQL statements to solve some prompted problem, or return some result. You submitted assignments and these were evaluated like an old-school math test.
The second week consisted of a team project in which we had to develop a small web application that could do basic CRUD operations (create, read, update, delete) using a relational database management system. My team used MySQL and PHP. It was a course with a lot of potential but I think it left much to be desired. I also think this is something that can easily happen when you cram material into 7.5 weeks.
SER 216 – Software Enterprise: Testing and Quality Assurance – 3 Credits
When I took this, it was all about learning how to test your code. You learn about black-box testing, white-box testing, integration testing, etc. You also cover things like static analysis and code coverage tools and code reviews. You learn about all the tools you need as a software engineer to ensure that your code is high-quality, does what it’s supposed to, and will be thoroughly tested throughout its lifecycle. This is important stuff to learn. It culminated in a project in which we built a simple Java-based game and made sure to write unit tests for it.
SER 316 – Software Enterprise: Construction – 3 Credits
This is where you start doing the fun stuff. This class teaches you about the Agile methodologies of developing software in small teams. You get into a team right away and are assigned a project. My team had to take existing software, learn how it works, and add major functionality to it while working in 2-week sprints. We learned things and used things like Git (version control software), Scrum (an Agile workflow), more static analysis, design patterns, and most importantly, how to do meaningful work on a pre-existing code base. Most places you go to work will require this skill; it’s actually very rare to start a project from scratch in industry.
This course requires lots of coding, but it also requires collaborating with team members that may or may not be in your same time zone. Part of the challenge (and the learning) is dealing with this challenge. You use tools like Slack, Taiga, and Github to work with teammates. You have to maintain a set of project documents along the way. This is a great way to begin networking with other future software developers.
This was the first class to give me a really cool project to put on my resume. I was able to use this project’s experience to help me get offers for internships later in the year.
SER 334 – Operating Systems and Networks – 3 Credits
Right away I will say that this class, when I took it, was much less networks and lots more operating systems. We worked in a Linux VM and learned about how operating systems work, how they manage processes, how threading works, etc. We used the C programming language as a vehicle for learning in this course. We coded things like loadable Linux kernel modules, box blur algorithms for image editing, and more. It was a very difficult class, especially with C being a quite different experience than Java, but it was valuable nonetheless. I’d have liked to have seen more networking stuff though; this is another consequence of 7.5 week courses.
CSE 240 – Intro to Programming Languages – 3 Credits
This class gets into detail about how programming languages work. It covers the different types of programming paradigms, covers a few languages specifically (not in-depth, but just enough to highlight how different syntax works across different paradigms).
This class wasn’t very well done in my opinion (and many other opinions). You’re tested on some very trivial stuff and less on actual fundamentals. It’s surprisingly easy to do awful in this class. Across the whole program, it was my lowest grade, a 3.0, and I managed a 3.95 overall in the program. I hope they improve it soon.
GIT 335 – Computer Systems Technology – 3 Credits
I won’t get into detail about this. It’s not a class you have to take; I took it to satisfy a “secondary focus” requirement, which at the time basically meant “whatever you feel like taking.” I just wanted something easy and this class is basically teaching you “what is a computer? what is a printer? what is the Internet?” I’m actually a little surprised I got three credits for it.
MAT 343 – Applied Linear Algebra – 3 Credits
So “applied” in this context basically means you use MATLAB, a programming language and software for doing mathematical stuff, to employ linear algebra to solve problems. The coolest thing we did was create some actual on-screen animations with linear algebra functions.
The course itself was pretty fun, and the material is important if you want to get into graphical stuff or game programming. It was another math class I decided to take in a condensed Summer session, which I still don’t recommend.
SER 321 – Software Systems – 3 Credits
This was a class about distributed software systems. It covers different mechanisms you can use to get one computer to talk to another computer to do meaningful work. It was the first class in which we wrote programs using two different languages: C++ and Java, and had the programs interacting with one another. When I took it, we deployed a server on a Raspberry Pi, and communicated it with the Java GUI application on desktop.
This was fascinating stuff. There’s even a section on Bash, which in retrospect I wish I had taken an entire course on. This was the first course where I felt like a “real programmer,” which obviously has different meanings to different people.
One other thing — many people have a very hard time with this course. The weekly labs are very time consuming. You really have to get started on assignments early and grind away. I loved the labs but I also spent nights and spare time thinking about them and their possible solutions.
This is another course that gave me some good stuff to talk about in interviews. At this point you should be able to speak intelligently about many technical topics, but you’ve still got a lot to learn (“still got a lot to learn” doesn’t really go away, even when you’re finished with school).
SER 415 – Software Enterprise: Inception – 3 Credits
This is another enterprise pipeline course with no coding involved, but it’s important. It gets you thinking about how requirements for new software projects are gathered. There’s often a huge disconnect between what a customer wants and what developers think they want; this class is about closing that gap.
It really wasn’t a heavy course; I think I spent a small fraction of what I spent on SER 321. This is a great strategy for online classes: figure out what the really hard classes are, figure out the less time-consuming ones, and combine them in strategic ways. I spent a lot of time providing guidance to my peers on the best course combinations to take.
EGR 104 – Critical Inquiry in Engineering – 3 Credits
When I took this course, it didn’t feel very mature. The material seemed important — you’re supposed to learn about constructing clean arguments, recognizing fallacies in other arguments, and engineering thinking skills in general. I think for any BS in an engineering field, this is critical material. And consequently it is a required course for this program, but I think it needs a lot of work. I think I spent about 30 minutes a week on it, so at least it didn’t take much focus away from the very demanding course I took alongside it, which I’ll discuss next.
SER 421 – Web Apps & Mobile Systems
This course packs a ton of important and relevant material into 7.5 weeks. This is the one that taught me about server-side programming, where the vehicle for learning that was Node.js. This was exciting because Node.js seemed very relevant, and in 4-year university programs where curriculum can’t typically keep up with the pace of technological development, students tend to crave relevant vehicles for learning.
I did mention before, the vehicle they use doesn’t matter; it’s the concepts behind them that matter. But even in the 400-level courses, students are happy to try modern stuff.
Yet again, this course provided me with interview fodder. You need to accumulate things to talk about in software engineering interviews; the company’s interviewers want to know that you’ve got experience doing this stuff, not just learning it.
SER 401 – Computing Capstone I – 3 Credits
Capstone is the most exciting part of ASU’s program. You get placed in a team after bidding on a set of projects put together by a set of sponsors, some from industry and some from ASU’s academics. The teams are usually 5-6 people, hopefully in the same time zones but not necessarily so.
The projects are outlined in detailed (some more than others) documents. The sponsors range from instructors you’ve had in the program to Dell and NASA, so the projects you could potentially work on are very interesting. I’ve seen projects involving databases for NASA, penetration testing software, software that leverages machine learning, and more.
It goes without saying that you need to be willing to learn new skills that school hasn’t thus far taught you in order to succeed in Capstone. Indeed, picking up new skills is a core component of being a software engineer in today’s rapidly changing ecosystem. Be bold, be ready to learn, and take Capstone very seriously and you’ll come out of it with great resume bullets and a lot to talk about to recruiters and interviewers.
My project was sponsored by Dell and involved building metric visualization software using Python, Node.js, Grafana, InfluxDB, and Docker. That’s a long list of technologies that you’re probably not touching on in any other courses. It was a blast learning about it all though, but more importantly, implementing it. Capstone was a very rich experience for me.
This was my _final_ semester, and I crammed a lot of courses into it in order to finish it. 2019 was my final year in the military, and I had landed an internship at Tableau Software beginning during Spring B Session. Things were all coming together at this point.
PHY 121/122 – University Physics I: Mechanics + Lab – 4 Credits
You could say I procrastinated on leaving physics for the end. It was easy to ignore it because it isn’t a pre-requisite for anything, but you are still required to take it for this program. It was a pretty standard university-level physics course. Calculus II is a pre-requisite for it but you can honestly get through the whole course without doing much calculus at all.
The labs are done via simulation software, which seemed fine enough. They were pretty challenging but I enjoyed them.
Anyway, physics is physics.
SER 416 – Software Enterprise – Project Management/Process – 3 Credits
The final course in the enterprise pipeline is all about project management, which is an entire discipline being taught in 7.5 weeks. As you can imagine, you don’t come out of it with enough knowledge or experience to get any certification, but it does provide good perspective about what project management is all about.
When I took it, I had to do a session-long project planning for a community services web application. I had to do cost estimates, Gantt charts for timeline, prototyping (I used React and MaterialUI for my mockup), etc. It was a pretty easy course, all-in-all. Honestly, doing the React prototype was more effort than necessary, but it was a good time.
EGR 280 – Engineering Statistics – 3 Credits
This course could have been a rigorous statistics class. It should have been rigorous; the convergence of data science and software engineering is happening pretty quickly, and knowing some stats can definitely be useful. But this class almost felt more like a class on Microsoft Excel functions more than anything. At the time, I was ready to be done, so I wasn’t too upset about the lack of depth. Maybe they’re improving it though; a lot of people have complained about it.
SER 422 – Web Application Programming – 3 Credits
This class is a more rigorous focus of web applications than what was covered in SER 421. We built REST APIs using Java Servlets (a bit dated, I know), learned about SOAP and web services, and about the history of web application programming in general. I often joked about this course being renamed “Applied Web Programming History,” but servlets are still out there, people are still using SOAP APIs, and so it’s not bad stuff to know about.
This was also a difficult lab-oriented course that many people struggled with. I spent a ton of time on it. I’d estimate I spent 25-30 hours per week on this one.
SER 402 – Computing Capstone II – 3 Credits
This is the second half of Capstone. It’s a continuation of SER 401, usually with the same team. If life events prevent you from taking 401 and 402 back-to-back, you’ll get placed on a new team and will have to integrate into an ongoing project, which isn’t ideal but they have to offer that flexibility. Most people are able to do the back-to-back Capstone courses though. Read the SER 401 section for more details about Capstone.
And that’s it! I was able to transfer over 3 credits for “cryptology” from my military transcript; those contributed to my secondary focus. I know they’ve fine-tuned some courses and added others since I left, and I’m certain they’ll continue adding more. This program is becoming very popular.
I made the decision to attend graduation on campus, which was a neat experience. I wasn’t a huge fan of Arizona, but I was amused by the fact that I was “visiting my school” after having completed an entire program with them.
Do I Recommend It?
Some courses in this program need a lot of work, but despite that, I think it is worth the effort. I received a ton of valuable hands-on experience, worked on meaningful projects, and was challenged enough to build the skills I needed to transition into this career professionally. I believe the program provides you with the skills you need. No education pipeline is going to provide you with everything you need to be successful in this field; it’s always changing and so you need to be willing to stay on top of it. But ASU provided me with the jumpstart and tools I needed to get started.