The first code most people end up writing
The first code most people end up writing

What Do I Learn From Computer Science in College? My Degree Course Breakdown

Choosing to pursue a computer science degree is a significant decision. Many aspiring tech professionals wonder, “what do I learn from computer science in college?” To provide clarity, I’m sharing a breakdown of my computer science degree coursework and reflecting on its relevance to my career as a mobile developer. My aim is to offer insights that help you make informed choices about your tech career path.

Disclaimer: My perspective is shaped by my experiences and career as a mobile developer. While the courses I discuss are valuable and can lead to various specializations, my reflections are from my specific career trajectory.

Programming Fundamentals: The Core of Computer Science

My journey began with Programming I & II. These courses were truly foundational. Before them, my programming experience was minimal – just basic loops. These classes were where I genuinely learned to program. Starting from creating a simple, compilable file in an IDE (Code::Blocks), we progressed to developing a text-based battle game. Looking back at my early code is humbling, showing how far I’ve come.

What did I learn? In essence, everything fundamental. These courses provided about 70% of the knowledge I needed to work as a professional programmer. Key concepts included:

  • Control Flow: if statements, loops, boolean logic
  • Object-Oriented Programming (OOP): class creation, struct creation, interfaces, polymorphism, inheritance
  • Basic Data Structures: arrays, vectors

These courses were incredibly valuable, establishing the bedrock for my programming skills.

Discrete Structures: Logic and Mathematical Foundations

Discrete Structures in Computer Science aimed to instill boolean logic, which we grasped quickly. However, the course delved much deeper, covering:

  • Logic, set theory, and set operations
  • Methods of proof
  • Recursive definitions
  • Combinatorics
  • Graph theory

While these are valuable topics, their early placement in the curriculum alongside Programming I & II felt premature. Some concepts were advanced, and mathematical proofs were challenging. I even had to refresh my memory on combinatorics recently, indicating its infrequent direct application in my daily work.

Initially, much of this course seemed disconnected from a computer science career. With experience, I recognize the utility of logic, set operations, recursive definitions, and graph theory. Logic and set operations are somewhat relevant in my mobile development work. Recursive definitions and graph theory have been more pertinent in technical interviews. However, a backend developer might find graph theory significantly more relevant in their daily tasks.

Data Structures: Organizing Data Efficiently

Data Structures was an exceptionally useful course. Data structures are fundamental to programming, forming the basis of most code. They enable efficient data storage and manipulation, crucial for program performance. Understanding how to choose the optimal data structure for time and space efficiency is a vital skill.

This course covered:

  • Arrays, stacks, queues
  • Linked lists, doubly linked lists
  • Trees, graphs, heaps
  • Variations like self-balancing trees

Learning data structures in C added another layer of depth. C’s intricacies, particularly memory management, provided valuable lessons in careful resource handling. This class was rich in practical knowledge, and mastering data structures is essential for any aspiring software engineer and crucial for technical interviews.

Analysis of Algorithms: Understanding Code Performance

Analysis of Algorithms had mixed relevance. Algorithms are undeniably crucial for efficient software, but the course delivery had shortcomings. The most valuable takeaway was Big O notation. Big O notation is essential for evaluating code performance in terms of time and space complexity. While companies often use timers for runtime performance analysis, Big O notation allows for code evaluation purely by inspection.

While the course introduced algorithms like the knapsack problem and the traveling salesman problem, their direct applicability was less apparent. However, understanding famous algorithms, their purposes, and implementations is beneficial, especially for interviews. Big O notation remains a key concept, valuable both on the job and in interview scenarios.

Image alt text: Graphic representation of a web development technology stack, featuring logos for HTML, CSS, JavaScript, and backend technologies, commonly used in web development.

Web Development: Practical Skills for the Digital World

Web Development provided the most immediately job-relevant skills. I learned:

  • HTML, CSS, JQuery, JavaScript, PHP, JSON
  • Front-end to back-end request cycles and server-side processing
  • UI creation and data layer interaction

By the course end, I built my own website and independently learned Angular, which enhanced my site and helped secure my first internship. Beyond specific technologies, I developed the crucial ability to quickly learn and apply new languages, frameworks, and data formats using documentation and online resources – a cornerstone of effective programming.

Introduction to Databases: Managing and Querying Data

Introduction to Databases primarily focused on SQL. While other database concepts might have been touched upon, SQL for data querying is what stuck. SQL’s relevance is job-dependent; it can be central or peripheral. If your role requires it, mastering SQL is essential; otherwise, basic familiarity suffices.

Software Engineering I & II: Project Management and Software Development Lifecycle

Software Engineering I & II covered broad software development concepts, including:

  • Scrum and Waterfall project management methodologies
  • Testing types and methodologies
  • Usability and accessibility principles

This course served as a general overview of software development lifecycle concepts. While providing a useful introduction, the breadth meant less depth in critical areas like testing.

Image alt text: Illustrations of various computer architecture types, such as Von Neumann and Harvard architectures, demonstrating different hardware designs.

Computer Architecture & Assembly Language: Under the Hood of Computing

Computer Architecture & Assembly Language was memorable for its deep dive into computer operations. We explored machine instruction processing and wrote code in MASM, an assembly language close to machine code. Most prior languages were high-level, closer to human language. MASM offered a contrasting, machine-level perspective.

The key takeaway was understanding what happens to code after compilation – how computer hardware executes instructions. While fascinating, this course hasn’t been directly pivotal in my mobile development career.

Operating Systems: Managing Computer Resources

Operating Systems is a blur in my memory. I recall building a messaging program using socket programming in C and learning about file and folder manipulation via scripts. Frankly, much of this course’s content hasn’t stuck, likely due to limited direct application in my career.

Introduction to Computer Networks: Understanding Network Communication

Introduction to Computer Networks was highly valuable, covering network functionalities and protocols such as:

  • HTTP, HTTPS, TCP, IP, FTP, IMAP, POP3, SSH, DNS

I learned protocol purposes, implementations, and rationales. These protocols are fundamental to modern software, from email (POP3, IMAP) to web requests (HTTP, HTTPS) and secure network device management (SSH). This course provided a solid understanding of internet workings and global device interaction. This knowledge has been practically useful for debugging network issues, aiding in pinpointing problems for backend developers.

Introduction to Usability Engineering: Designing User-Friendly Interfaces

Introduction to Usability Engineering focused on intuitive and accessible app design. Accessibility, ensuring software usability for everyone, including those with disabilities, was a key theme, covering text-to-speech and audio-independent design.

The course raised awareness of accessibility and user experience, crucial for effective software. However, platform-specific implementation details, like Apple’s Human Interface Guidelines, are often necessary for practical application, potentially overshadowing the general principles taught in the course.

Mobile and Cloud Software Development: Focused on Mobile Platforms

Mobile and Cloud Software Development was less impactful for me, as I was already working as a mobile engineer. The course felt outdated, recommending Windows Phone app development, a less relevant platform. The course structure and evaluation also felt weak, lacking in guidance and platform expertise.

Capstone Software Project: An Assigned, Outdated Project

The Capstone Software Project involved building a GUI for database access using curses. The assigned, group project felt outdated and uninspiring. Limited teacher interaction and lack of student choice in project selection further diminished its value. A more effective approach would have been student-proposed projects, fostering interest and practical work estimation skills.

Final Thoughts: Essential Knowledge and Continuous Learning

While some courses were less directly applicable to my current role, a computer science degree provides a valuable foundation. Data Structures and Algorithms stand out as essential for every software engineer. Other courses’ relevance depends on your chosen career path – Computer Architecture for embedded systems, Computer Networks for front-end engineering, and so on.

The key takeaway is that continuous learning is paramount for a good engineer. Identify knowledge gaps relevant to your work and proactively seek to fill them. This ongoing pursuit of knowledge is how you become a better coder.

Explore More of My Articles

Starting a tech career from nothing.

Choose the best tech career for yourself — Dev Ops, Mobile Engineer, Data Scientist, Project Manager, and Front End.

Tips for your first tech interview.

Should you get a computer science degree?

Swift vs. Objective-C

Comments

No comments yet. Why don’t you start the discussion?

Leave a Reply

Your email address will not be published. Required fields are marked *