I’m Jessica Kilbourne, and this is an ePortfolio I started in my CS-499 Capstone Course (T5477).
Self-Assessment | Introduction | Software Design & Engineering | Algorithms & Data Structures | Database | Old Source Code | New Source Code
ASCII Art by Jessica Kilbourne.
The following self-assessment contains the many skills and abilities accumulated throughout my computer science program. They consist of team collaborations, stakeholder communications, data structures, algorithms, databases, software engineering, and security, and have helped to develop my strengths, shape my professional goals and values, and prepare me for a career in computer science.
In my CS 250 course, the Software Development Life Cycle (SDLC), we focused on the modern Agile method as well as the waterfall method for approaches to software design. We learned when and where these are best implemented, sometimes in a hybrid way (Cobb, 2015, pp. 44-45). This course gave me a good perspective on every role within the software development team by stepping into their respective roles and performing their duties, from the product owner (PO) to the Scrum Master (SM) to the developer, analyst, and tester.
In my course on collaboration and team projects (CS 310), I learned of distributed and centralized version control systems (VCS) and their benefits to the development team. Using the distributed system and Git, we worked together to create projects. We created repositories, cloned code, checked out branches and merged or rebased code. Many of my later classes also used Git commands and GitHub or Bitbucket hosting, giving me more experience with git push, commit, clone, add, restore, and branch check outs. Prior to a code review, I would check my code for errors, perform unit and run tests, and check run performance. In code reviews, we provided feedback to each other. We looked for bugs and conformance to requirements, while suggesting improvements. An important concept of collaboration, and one that holds true to my values and everyday life, is to treat everyone with respect and dignity.
Figure 1: Communicating with classmates on GitHub.
READ given item name
IF item name given THEN
proceed to next step
ELSE
return to start of program
READ given item price
IF item price given THEN
proceed to next step
ELSE
return to start of program
READ given item quantity
IF item quantity given THEN
proceed to next step
ELSE
return to start of program
WRITE Receipt
WRITE subtotal
CALL specified food items quantity, name, price, and CALCULATE subtotal
IF there is another item to add THEN
Repeat steps up till now
ELSE
Continue to next step
CALCULATE the sum of all subtotals
WRITE the calculation of the sum of all subtotals
CALCULATE tax multiplied by the sum of all subtotals
WRITE the grand total: tax multiplied by the sum of all subtotals
Pseudocode for a food receipt program:
Figure 2: A Basic Flow Chart for a Food Receipt (uses branches).
Figure 3: A flow chart for performing calculations on a list of people’s weights (uses two loops).
MAT 230 Discrete Mathematics and MAT 350 Applied Linear Algebra contributed to my understanding of algorithms and data structures. Discrete math focused on logical expressions, truth tables, applied modular arithmetic, combinations, and permutations using graph algorithms and more. Applied linear algebra focused on linear equations, determinants, matrices, and eigenvectors, as well as vector, null and sub spaces, to name a few.
All these skills culminated in my CS 260 Data Structures and Algorithms class where I practiced applying data structures using the C++ language. I organized data and implemented technically sound algorithms, both basic and foundational, to develop effective computer programs and solve processing problems. My CS 330 Graphics and Visualization course also made use of data structures and algorithms quite regularly. In this class, I did work with C++, MinGW, OpenGL, and LAMP, as well as GLEW, Freeglut, GLM, and SOIL2 Dynamic Link Libraries (DLL’s) to create 3D objects using a very large algorithm. These come complete with textures and algorithms for keyboard controls that pan, zoom, and orbit the view of the object. I also created a small animation of a textured object rotating at an angle.
Figure 4: Two Dimensional OpenGL Shapes.
Figure 5: Three Dimensional OpenGL Shapes with and without lighting effects and textures.
Figure 6: Three Dimensional OpenGL pyramid with lighting, lighting effects and texture.
Although I learned much about software design and engineering from the study of flow charts and pseudocode in my Python and Java classes, it is also critical to understand how businesses and organizations are structured and how they often work. My IT 210 Business Systems Analysis and Design (BSAD) class clarified my understanding of business, providing awareness into what systems work for various types of businesses.
My IT 315 Object Analysis and Design class united my understanding of agile phases and responsibilities, engineering principles, and BSAD. The class focused on combining object-oriented techniques and methods. We used computer assisted engineering technology (CASE) for analyzing and designing software systems with a unified modeling language (UML) to create functional, structural, and behavioral models. I studied business requirements to make class responsibility collaboration (CRC) cards, as well as use-case, sequence, communications, class and behavioral-state machine diagrams.
Figure 7: Student Information System (SIS) Use Case Diagram.
Figure 8: Student Information System Sequence Diagram.
Figure 9: Student Information System Communications Diagram.
Figure 10: Student Information System Class Diagram.
Figure 11: Behavioral State Machine Diagram.
CS 320 Software Testing, Automation and Quality Assurance taught me how to test my creations by learning about requirement analysis, validation, verification, and quality management. In the class, I effectively learned how to uncover errors in software through evaluation using best practices in testing techniques and applying strategic unit tests.
Finally, my knowledge in databases is extensive. Not only can I effectively use MongoDB, the document-oriented NoSQL data store which I will explain in detail later on, but I also understand structured query language (SQL), and how to manage MySQL relational databases with it. I can create databases which meet organizational specifications, manipulate data for single and multiple tables, and develop queries to extract data using SQL statements. I can perform joins and alter tables. I can add constraint keys, columns, rows, and much more. My DAD 334 Oracle SQL Fundamentals class furthered my understanding in SQL. In an Oracle environment, I know how to restrict, retrieve, report, display, and sort data with SQL as well as write subqueries, manipulate data, manage tables, and work with schema objects.
The experiences gained from engineering and database classes, combined with other course knowledge and experience, have given me a solid foundation of understanding that also considers ethical frameworks, privacy policy guidelines and the social consequences of my work. A guide which I hold dear, and one which has been instilled in me, is the developers code of ethics, available online from ACM (ACM Code Task Force, 2018). These rules serve as a guide on ethical concerns for my future in the field of computer science and my career as a software engineer.
The following artifact, created in my CS 340 Client-Server course, will serve to inform the portfolio by demonstrating a wide range of my abilities in software design, algorithms, data structures, and databases. I will delve into the specific aspects of this creation in a code review, and then perform enhancements on the artifact. In doing the code review, I will explain where, why, and how I plan to make changes. I will then execute these changes, providing code updates and explanations, and reflecting on the process as I go.
See Arrioc’s Artifact Introduction
LinkedIn: