Many people want to become programmers because of the comfortable and lucrative life it offers. Work hours are normal and consistent. Your work environment is a desk with a computer with multiple monitors in a air conditioned room, which probably exists in a building in some wonderful city like Seattle (and that’s if you choose to work in the office instead of from home). There is little to no physical expectations of you. Your work is intellectually challenging, and you are surrounded by bright minds who share typically have the same common interests as you, like tech or games. You get to dress comfortably in your own clothes- no suits or uniforms! On top of all this, you’re making a nice 6 figure salary. Whats not to love?
Like many others, I entered college to get a Computer Science degree for the above reasons. Also like many others, I had no idea what it actually meant to be a software developer. I thought you just wrote some code, which you could then double click and poof! Your program is running. Oh how naive I was!
As Shrek once said, “Software engineering is like an onion. It has layers.” I might be paraphrasing a little, but the point still stands. There are so many systems, intricacies, and tools at your disposal as a developer that many new to the field don’t realize are at play. I learned a ton through a software engineering class I took at the University of Hawaii at Manoa, and I would like to share some of the things that I found useful or didn’t think about prior to taking the course.
Github has honestly revolutionized my life as a fledgling developer. It provides incredibly easy configuration management (maintaining a consistent, functioning state for your program) through version control via branches and commits. Any time you decide you want to work on some additional feature or try to fix a bug in your code, you can create a branch of your main and work in that branch, committing as you go along. In layman’s terms, you can create a copy (branch) of your working code (main) and work exclusively in that copy, leaving your working code untouched. When you are satisfied with what you have worked on in your copy, you can move those changes over to the working code (committing and pushing).
There were so many times I would be trying to code some multi file project and I would go from an almost working program to completely broken. Now, I do my work in branches. If I make progress, I can commit the changes to main. If I royally mess up my code, I can just make a new branch from main. In addition to version control and configuration management, Github is basically a cloud for your code. You can save all your projects to Github and share your code with the world. Github is life changing and by the most useful thing I learned from my class.
In addition to software engineering, I am also taking a class in program structure, where we learn how our code interacts with the computer’s memory spaces through creating programs in C and C++. Initially, we were told to code via Vi. Thankfully, the pain quickly subsided when our professor told us after one or two easy homework assignments that we could choose to code in an IDE (Integrated Development Environment), and that he wanted to show us how to use Vi.
Without the software engineering course, I wouldn’t really have a solid handle on what an IDE is, how to use it, or where to get one. IDEs are absolutely wonderful. They provide real time feedback on your code, to include syntax errors, missing packages or libraries, or even a quick way to compile and run your code to see if it is working the way you want it to. For web applications, IntelliJ IDEA is a great IDE to use. It even comes with Github commit and push capabilities!
The last topic we covered in class was ethics as a programmer. This was something that hasn’t crossed my mind before. I assumed that I would be coding some database for a bank or something like that. But I could end up working for a defense contractor working on the guidance system for weapons of war or creating a facial recognition system for law enforcement. Would I be okay knowing that my code is being used for morally questionable reasons? What if the company I’m making a medical record database for refuses to ensure security is in place? Will I be okay with creating software that will be used to intrude on people’s privacy? This topic taught me a lot about myself both as a programmer and as a person, as well as where my classmates stand on such issues.
This software engineering course was an incredible experience. I learned so much about standard industry practices, as well as how to create a full fledged application, from UI, to database, to functions and methods. It taught me about Github and IDEs, as well as the philosophy and ethics behind proper software engineering.