More than web apps

08 Dec 2022

One step for student, one giant leap for developer.

I realized, I know nothing.

squidward throwing his brain away Once again, I am humbled by how little I actually know about a topic. This time, it is regarding software development. Coming into this course, I thought I watched enough Youtube videos titled, "Learn software dev in 60 seconds", to know what software development is. A bit of HTML videos here and some CSS tutorials there, but through this semester, I've learned its much more than creating a fancy user interface or having the ability to talk about the newest programming language. It's about uniformity, collaboration, utility, and much more.
In the following sections I will be discussing fundamental concepts or pillars of software development that I've learned over the past four months. Some of these concepts I've already covered in detail and will have links pointing to those essays.



    squidward throwing his brain away
  1. Open Source Software Development.
  2. Configuration Management
  3. Functional Programming
  4. Development Environments
  5. Coding Standards
  6. User Interface Frameworks
  7. Agile Project Management
  8. Design Patterns
  9. Ethics in Software Engineering


Open Source Software Development

Open source is one of my favorite parts of software development. The idea of people from all over the world, banding together to solve common problems really inspires me. It empowers developers and contributors to do good in a virtual sense. Being able to communicate in a distributed and asynchronous fashion with a community of like minded individuals with the same or more experience than you makes you feel less alone when solving problems. This on top of the feel good moments from helping others with programming issues, or fixing a bug is intrinsically rewarding on its own. Paired with having a living resume of your contributions on GitHub for potential employers, open source software development is a one of the most important pillars of software.

Configuration Management and Version Control

I spoke briefly about GitHub earlier and the concept of having a living resume for potential employers to see. Although that is a nice addon feature, it is not GitHubs sole purpose. GitHub was born out of necessity for configuration management and version control. At one point in time, developers needed to track errors and specific software configurations by hand, which made it difficult when working with others. Working with others with different coding styles and backgrounds also made it difficult to blend group code together. Configuration management helps us track and identify all system configuration and version control helps us manage different versions of a software. Git enables decentralized development and GitHub helps us manage our code repository and host our code. The power of configuration management and version control is in full display for big code bases like the VSCode Project. For this repository, there are over 1700 contributors, 635 branches or versions of the code, and over 5000 issues they are solving and or have solved.

Functional Programming

Functional programming was one of the first things I was introduced to in the beginning of my engineering education. We learned how to use the C programming language. While I am grateful for that experience and it has allowed me to pick up other languages easier, I thought to myself, “Man, I can’t imagine creating a whole website in this language”. It was necessary to learn how to create and use functions. To be able to manipulate data a in a specific form into multiple other forms, but using C just always seemed a bit excessive at times. That’s why I’m glad there’s JavaScript. The best part about a functional language like JavaScript is that it doesn’t always force you to think like C. The fundamental constructs required are given to you allowing functions to be used as data, be passed to other functions, and have functions be return values of other functions.

Development Environments

Integrated Development Environments (IDE) are a wonderful tool for editing code. They can be used to identify languages, understand syntax, perform integrated compilation, debug, and many other add-on features. For this semester, we learned intellij idea, which felt like a breath of fresh air. I was spoiled with autocorrects, error detection, and refactoring which made writing code so much more efficient. I could have multiple tabs open at once and even perform CLI commands in the built-in terminal. Anyone who isn’t using an IDE is missing out.

Onward

What a journey this has been. While I reach the end of my formal education in undergraduate computer engineering, I begin a new one in software development. I now have the know-how and the fortitude(somewhat) to pick an open source project to assist in. I can write legible code utilizing useful development environments. I can help other developers and get help solving problems. I can navigate through simple coding frameworks and collaborate with a team using agile team management. I am looking forward to failing, learning, and immersing myself in the digital world.