0% found this document useful (0 votes)
14 views

For Students by Students a Python Programming Manual for Structural Engineering Courses

The document presents a Python programming manual developed for structural engineering students at California Polytechnic State University, aimed at addressing the challenges faced in learning programming through existing resources. It details the collaborative effort of students and faculty to create a tailored 24-chapter guide that includes relevant libraries and practical applications for structural engineering. The manual was implemented in Fall 2023, with feedback leading to revisions, and was published for public use in December 2023.

Uploaded by

hakim
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
14 views

For Students by Students a Python Programming Manual for Structural Engineering Courses

The document presents a Python programming manual developed for structural engineering students at California Polytechnic State University, aimed at addressing the challenges faced in learning programming through existing resources. It details the collaborative effort of students and faculty to create a tailored 24-chapter guide that includes relevant libraries and practical applications for structural engineering. The manual was implemented in Fall 2023, with feedback leading to revisions, and was published for public use in December 2023.

Uploaded by

hakim
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 20

Paper ID #44716

For Students, By Students: A Python Programming Manual for Structural


Engineering Courses
Dr. Anahid Behrouzi, California Polytechnic State University, San Luis Obispo
Anahid Behrouzi is an associate professor of architectural engineering at California Polytechnic State
University - San Luis Obispo. She has been involved with STEM education beginning in 2003 as a
volunteer and summer instructor with the North Carolina Museum of Life and Science. She has been
engaged with undergraduate/graduate course delivery in the topic areas of engineering problem-solving
and structural engineering at North Carolina State University (2008-2011), the University of Illinois at
Urbana-Champaign (2012-2015), Tufts University (2015-2016), and Cal Poly - SLO (2016-present). She
has a BS in civil engineering and BA in Spanish language & literature from North Carolina State Univer-
sity, and a MS/PhD in civil engineering from the University of Illinois at Urbana-Champaign.

Kennedy Angel Gomez, California Polytechnic State University, San Luis Obispo
Aaron Dewey, California Polytechnic State University, San Luis Obispo

©American Society for Engineering Education, 2024


For Students, By Students:
A Python Programming Manual for Structural Engineering Courses

Abstract
Learning to program is challenging enough for structural engineering students without the
complexity of using a textbook with examples from unfamiliar engineering and scientific fields.
Moreover, the open-source nature of Python means each library has a separate documentation
website to navigate, discern what functions are useful, and how to implement them.
The idea of a senior project to develop a Python manual tailored to structural engineering
students came from the authors’ experiences in three structural analysis/dynamics computing labs
in Cal Poly in San Luis Obispo’s architectural engineering (ARCE) curriculum. The team
recognized the barriers, lack of confidence, and frustration that learners faced with existing
programming resources. To determine the topics necessary to best support students in the labs
and later in structural design industry, two pre-project surveys were conducted with upper class
students and industry practitioners respectively.
This led to a 24-chapter document on Python programming topics, including libraries for
numerical and symbolic mathematics (NumPy, SciPy, SymPy) and creation of tabular and plot
outputs for communicating results in technical reports (Pandas, Matplotlib). The manual includes
explanations, graphics, and examples related to structural engineering for students to follow and
apply to coursework, along with exposure to industry usage. A complete draft of the manual was
implemented in the Fall 2023 offering of the first computing lab. Student comments were
collected throughout the course and formal surveys were conducted at the end of the quarter.
This feedback led to significant revisions of the document that was ultimately published for
public use in December 2023 via Cal Poly @ Digital Commons.
This paper summarizes pre-and-post project survey results, develop process and content of the
Python manual, as well as outcomes of the senior project team that worked to educate and
motivate their peers to program in Python.
Introduction
This paper describes the year-long process of developing a Python manual as an Architectural
Engineering (ARCE) senior project at Cal Poly in San Luis Obispo. The manual’s intent is to
support students as they learn to create programming tools to address various structural analysis
and dynamics problems in three upper division ARCE undergraduate courses. Having recently
completed these courses themselves, the student co-authors recognized barriers of student
success included not having a topic-specific course textbook, given that each Python library has
a separate documentation website and that existing coding textbooks for engineering students can
have examples which in their unfamiliarity generate more confusion.
Through this “for students, by students” resource, the 24 chapters of the manual provides
guidance that focuses on Python libraries that enable numerical and symbolic calculations, as
well as production of data tables and visualizations to communicate results through technical
reports and presentations. The topics for the manual were selected with intention as
programming functionalities that are directly relevant to structural engineering applications. The
tailormade content of this manual was informed by two pre-project surveys of prior students and
industry members, review of the target courses’ curriculum, and of multiple existing
programming textbooks and courses.
The goal with developing the programming manual is to address students’ knowledge gaps, build
confidence, and motivate them to learn how to program in Python. This is intended to provide
benefit past their immediate improved outcomes in the ARCE computing courses to beyond
graduation, enabling them as future structural engineers to leverage programming as a tool in
their careers.
Course Details
The undergraduate Architectural Engineering curriculum at Cal Poly in San Luis Obispo contains
three computing courses ARCE 352-354 taken in sequence at the junior level. These are paired
with the structural analysis lecture courses, that together, provide fundamental knowledge
necessary to proceed to the senior-level seismic analysis course. Table 1 shows each of the
structural analysis lecture classes with their paired computing class and its catalog description.
The lecture class has a 32-person enrollment that is generally three times per week at 50 minutes
a session, while the lab has a 16-person enrollment taking place once a week for nearly three
hours. The lab typically includes at least 1-1.5 hours of coding demonstration or discussion by
the faculty followed by in-class programming by students where they can ask questions of the
instructor and collaborate with one another. Lab assignments are typically due a week after they
are assigned which enables students to seek out external resources, friends, and the instructor
with additional questions. To date, the courses have not had a formal textbook on programming.
Table 1. Structural Analysis Lecture & Labs
ARCE 302 ARCE 352 Analysis of statically
Structural Analysis Structural Computing Analysis indeterminate structures using
virtual work, slope deflection,
the force method and plastic
analysis methods.
ARCE 306 ARCE 353 Analysis of statically
Matrix Analysis of Structures Matrix Structural Computing indeterminate structures by
Analysis direct stiffness method including
continuous beams, plane trusses,
and frames. Introduction to
finite-element methods.
ARCE 412 ARCE 354 Analysis of structures subjected
Dynamics of Framed Structures Numerical Analysis Laboratory to dynamic loads with single-
and multi-degrees of freedom.
Development of techniques for
analysis of structures in
response to time varying loads.

From a programming perspective the students are required to take CSC 231 Programming for
Engineering Students prior to ARCE 352. The catalog description for the CSC 231 course is as
follows: “programming techniques and procedures with applications to engineering problems.
Introduction to numerical methods and simulation.” This is typically taught using MATLAB,
though in Spring 2022 one pilot section was taught specifically for ARCE students in Python.
Project Background
The Cal Poly ARCE department began discussions of switching the teaching of ARCE 352-354
computing course sequence from MATLAB to Python during Fall 2020. Ultimately, the decision
to make the switch was motivated primarily due to the open-source nature of Python that would
make it more accessible to students as they entered the engineering profession while having
similar advanced functionalities of MATLAB. Specifically, the Spyder integrated development
environment (IDE) [1] was selected for instruction, since it has many color-coding,
autocomplete, and debugging features to aid newer learners to programming in Python. The first
offering of one of these classes in Python using Spyder occurred in the Winter 2021 quarter.
The faculty co-author was assigned ARCE 354 in the Spring 2021 quarter immediately following
this Python debut and did not teach it again until a year later in Spring 2022. The challenges in
the transition from MATLAB to Python syntax in Spring 2021 were understandable being that
students had taken all their programming coursework in MATLAB to that point. However there
still seemed to be significant gaps in coding knowledge and confidence in Spring 2022, after
students had already taken ARCE 352-353 in Python. This could be attributed to the fact that:
(1) there was no formalized textbook for the courses that focused on structural engineering
specific applications, to make concepts easier to relate to; and (2) that online resources for this
language are fragmented into separate library documentation websites, which make it more
difficult for a new learner to navigate. It was anticipated (and survey results shown later in this
paper suggest) that students need organized and topic-specific programming support beyond
instructor coding demonstrations and assistance they receive during lab or office hour sessions.
The original concept for the project was motivated by discussions with these students, and its
main objectives were captured in a recruitment email sent by the faculty co-author in July 2022
to those that had just taken the Spring 2022 offering of ARCE 354 with them:
“I am starting on a new project -- Python Manual for Architectural Engineering Students --
to serve as a supplementary document to students in [ARCE courses] which involve using
Python's capabilities specifically to solve structural engineering problems. I am seeking
1-2 students as collaborators for developing the example problem statements, preparing
sample code, and writing explanations. The objective is to help the future ARCE student
have greater access to information and build greater confidence in coding.” A brief topic
overview with twenty items was also included in the message.
The three ARCE student co-authors volunteered to take this on as their senior project and began
work in September 2022 by developing two pre-project surveys for past ARCE 352-254 students
as well as industry professionals. Their other major efforts in Fall 2022 were to conduct a
literature review of: (1) existing MATLAB [2, 3] and Python textbooks to understand content
and formatting of such a resource, (2) material from the CSC 231 pilot course in Python offered
to ARCE students during Spring 2022 to determine the programming knowledge students would
enter the ARCE computing classes with, and (3) past lab assignments from ARCE 352-354 to
identify a more detailed list of topics to address in the manual. To further the team’s knowledge,
one of the student co-authors also enrolled in the CSC 101 Fundamentals of Computer Science
during the Winter 2023 quarter that serves as the introduction to Python for computer science
majors, to glean additional information from this course that would be useful for developing the
manual. Together the students developed the majority of the manual between January and May
2023 with weekly meetings for feedback from the faculty co-author. The completed draft manual
was used for the first time in Fall 2023 in the faculty co-author’s instruction of ARCE 352, which
led to them making significant additions and revisions based on received student feedback.
After this tremendous student effort, the Python manual document was published within the
ARCE senior project report collection in December 2023 on the Cal Poly @ Digital Commons
repository [4] for use by other instructors and students. This resource is being treated as a living
public document managed by the faculty co-author who will continue to recruit student team
members to add topics to address relevant coding questions that arise in classes, ARCE
curriculum changes, and technology advancements impacting structural engineering practice.
Description of Pre-Project Surveys
Student Version
During the Fall 2022 quarter, a survey was distributed to senior and graduate ARCE students on
their programming experience coming into and during their university studies. This target group
would have completed most of, if not all, the ARCE 352-354 computing courses. The goal of the
survey was to establish a baseline of coding experience as well as identify course topics, methods
of instruction, and sources of motivation to integrate into the proposed Python manual.
Of the 28 survey respondents, 22 (79%) were seniors and 6 (21%) were graduate students. To
assess prior experience, students were asked when they were first introduced to programming in
any language: 13 (46%) had before undergraduate and the remainder had during university with
4 (14%) in freshman and 11 (39%) in sophomore years. Of the students with pre-college
exposure the majority was in high school with the JavaScript language through courses such as
Introduction to Coding or AP Computer Science and extracurriculars like Science Olympiad,
robotics club, or a university summer program. Those with their first encounter during university
were via CSC 231 in MATLAB language, the computer science pre-requisite course for ARCE
352. Despite this prior coding experience, 21 (75%) of the students were first introduced to
Python in junior year through ARCE 352.
Figure 1 summarizes responses from a series of 5-point Likert scale questions related to student
confidence on various Python skills from ARCE 352-354. For the survey questions presented in
Figures 1-3, students could select “N/A = I do not recall learning this topic (or using this
library)”, the average response shown in the figures are only for students that provided a ranking.
Figure 1. Pre-Project Student Survey: Confidence on Python Topics
(1 = Very Not Confident, 3 = Neutral, 5 = Very Confident)

Of the Python topics in Figure 1, students indicated a desire that more instruction time in the
coding labs had been spent on: (Priority #1) Interpreting Errors, (Priority #2) Plotting, and (Tied
for Priority #3) For Loops, Nested For Loops, While Loops, and Utilizing Different Libraries.

Figure 2 summarizes responses from a series of 5-point Likert scale questions related to student
confidence on various Python libraries.

Figure 2. Pre-Project Student Survey: Confidence on Python Libraries


(1 = Very Not Confident, 3 = Neutral, 5 = Very Confident)
Figure 3 summarizes responses from series of 5-point Likert scale questions related to student
confidence on implementing ARCE 352-354 concepts in Python.

Figure 3. Pre-Project Student Survey: Confidence on Coding ARCE 352-354 Topics in Python
(1 = Very Not Confident, 3 = Neutral, 5 = Very Confident)

The conclusion that can be made from Figures 1-3 is that there are a limited number of Python
skills or topics that the students felt a high level of confidence in, based on the average response
being equal to or exceeding 4.00. This leads to the question of how students had been getting
support in coding during these lab courses. Survey responses indicated the most used resource
was conducting an internet search (often leading them to the Python or a library’s documentation
website), followed by reaching out to friends, then seeking out YouTube videos, utilizing faculty
office hours, and lastly finding a textbook to consult (there was no assigned textbooks for these
courses, so these would have been found via a self-search). When asked what resources faculty
could provide in future course offerings to best support student learning, most respondents (93%)
indicated a PDF manual for performing certain skills/tasks in Python. This was a more popular
response than YouTube videos, a game website to practice coding, or a coding discussion forum.

Beyond collecting data on student’s prior programming experience and self-assessment of their
confidence on Python skills/topics in ARCE 352-354, the survey contained several questions to
gauge their perception of what value coding would have in their prospective career as structural
engineers. Of survey respondents, the majority (93%) had completed at least one summer
internship in the architecture, engineering, or construction (AEC) fields. In these positions,
almost all (86%) had utilized some form of programming with Excel being the most prevalent
and used “often/very often”, with a few instances of Python and MATLAB used “sometimes”.
There was a much greater range and higher level of usage when asked about commercial
structural analysis software (in rank order, for 10+ responses: RISA, ENERCALC, Simpson
Strong-Tie, Hilti). When queried about how often they anticipate using their programming skills
during their career in general, and for Python specifically, the average answers for both questions
were in between “rarely/sometimes”. This response is likely impacted by the fact that students do
not perceive their coding skills as transferable to Excel and that the use of languages they have
been taught, Python and MATLAB, being infrequent in industry. Also, there may be some impact
from the fact that on average students indicated that programming is more difficult than their
other engineering classwork which may result in a negative perception around this skill set.

Industry Member Version


An important counterpoint to the students’ perception of coding in industry, when they have only
had 1-2 summer internships, are the results from a pre-project survey of AEC practitioners. This
industry survey was conducted simultaneously in the Fall 2022 quarter with the student version
and received 22 responses. Most participants (77%) reported their first exposure to programming
occurred during their undergraduate education, with the remainder having been introduced to
coding prior to that and typically in high school. The distribution of their duration programming
in engineering practice was 0-1 (18%), 2-5 (55%), 6-10 (23%), and 10+ years (5%).
The majority of surveyed industry members (95%) reported using some form of programming in
their position, the exception being a respondent that works for a general contractor where the rest
are/were structural engineers. Of those who do program, they most commonly use Excel VBA
followed by Python and each report a total of 1-5 languages to also include C, C++, C#;
JavaScript; MATLAB; etc. The usage of commercial structural analysis products was also more
diverse than the students with individuals reporting a higher number of software types used (in
rank order, for 10+ responses: Hilti, RISA, ETABS, Simpson Strong-Tie, SAP2000, SAFE,
ENERCALC, RAM).
Additional survey questions were posed to understand the time and type of effort dedicated by
the respondent as well as their engineering colleagues to programming. When asked what portion
of the workday they devote to programming the median response was 1-10%, with a single upper
outlier at 81-100% that works on the in-house R&D team at a global company that provides
software and services for off-site construction. To that end, 40% of respondents indicated that
their firm has an in-house software team. Irrespective of having a dedicated team, of all surveyed
either they themselves or a colleague had implemented a wraparound script for structural
analysis (60%) and commercial CAD or drafting software (64%). These are two common
applications where coding becomes extremely useful.
A few examples of wraparound scripts respondents described for structural analysis tools were:
 Excel VBA to extract and format pier output from ETABS as input to SPColumn and then
process that output.
 Excel VBA to conduct a parametric study in ETABS on a large number of composite
deck designs and compile into a database to determine the optimal design.
 Python to manipulate input or extract data from ETABS as well as perform calculations
to ultimately produce visualizations and reports.
Similarly for drafting, surveyed practitioners described wraparound scripts:
 Python to read CAD files by layer and construct a full RISA 3D model including the
correct member material type.
 Python to extract linework synced with ultrasonic thickness testing data to create a
heatmap of the structure.
 Excel VBA to optimize the design foundation piles, print the associated calculations, and
draft all the piles in plan and elevation view in CAD.
There were many more examples gathered in the surveys, but these illustrate the overarching
themes: the ability to leverage programming in structural engineering practice to create
efficiency, improve accuracy when transferring information from one software tool to another,
enable execution of large batch simulations to optimize design solutions, and automate the
production of calculation packages, visualizations, and reports. Without exposure to these real-
world applications, students do not realize the extent to which they and their engineering
colleagues can improve their firm’s everyday project delivery workflow because they identified a
task that could be programmed and developed a new tool for their team.
In short, the industry survey indicated that while the total time per day programming is limited
for a structural engineer, mastery and application of this skillset produces significant value in
practice. This underscores the importance of the Python manual which aims to increase ARCE
student knowledge and confidence to use programming which can magnify the capabilities of
every other problem-solving tool in their engineering toolkit.
Description of Python Manual
General Overview
The Python manual was originally envisioned as a supplementary resource to support
undergraduate students in the ARCE 352-354 computing sequence. As time progressed, the
development of this resource was guided by three goals the author team had established to have a
broader impact to include other institutions and past a student’s graduation:
1. To fill gaps of coding and Python knowledge for ARCE students, starting from the
fundamentals and progressing to more advanced concepts.
2. To create a source for ARCE and civil engineering instructors to aid in their teaching of
Python, a topic-specific structural engineering programming textbook.
3. To motivate students to want to learn and utilize programming during their studies and in
their future engineering careers.
The publicly available Python manual on Cal Poly @ Digital Commons [4] is a 132-page PDF
file with the 24 chapters listed in Table 2 which includes coverage of the Spyder IDE (can be
downloaded independently or part of the Anaconda package) as well as Python libraries related
to numerical and symbolic mathematics (NumPy, SciPy, SymPy) and creation of tabular and plot
outputs for communicating results in technical reports (Pandas, Matplotlib). External website and
video resources are also provided throughout the document with the final chapter listing a
collection of library documentation websites, quick sheets, and platforms focused on
programming education.
Table 2. Python Manual Chapter Titles
1 Introduction 9 Built-in Functions 17 Sympy Library

2 Downloading Anaconda 10 Functions 18 Plotting Line & Scatterplots


19 Bar Charts, Histograms, &
3 Spyder Interface 11 If, Elif, & Else Statements
Pie Charts
4 Variables 12 For Loops 20 Printing

5 Operators and Expressions 13 While Loops 21 User Input


22 Script & Results Presentation
6 Data Types 14 Accessing Files
in Reports
7 Lists 15 Libraries 23 Errors & Troubleshooting
24 Where to Get Help &
8 Dictionaries 16 Arrays and Matrices
Additional Resources

Organization and Formatting of Chapters


In writing the Python manual, a typical organization was established for each chapter that
generally includes introduction of the topic, explanation of relevant concepts or functions, and
examples of how to implement the topic with detailed commentary. Furthermore, a graphic
standard was set following best formatting practices observed in other coding textbooks [2, 3]
and is explicitly described to the reader in Chapter 1.1 Using this Manual. These graphic
standards include visually highlighting sections where input and output lines of code are shown
(light blue background where input is separated using a black horizontal line from output which
is preceded by a >> symbol), a different font for indicating coding language (Courier New), and
providing explanatory comments in textboxes along the margin of coding examples (white
textbox with black border connected by arrowhead and leader line to the associated portion of
code). Motivation stations, that share industry examples of coding applications or data, appear in
some chapters and are also appear in highlighted sections (light green background).
A sample of both the typical organization and graphic standards for the first two pages of the
17 Sympy Library are shown in Figure 4. Note that all input code text in the manual is formatted
so it can be highlighted, copied/pasted, and run in Spyder to produce the results shown.
Figure 4. Typical Organization and Graphic Standards of Python Manual Chapter

Progressive Complexity of Examples

In each of the chapters, examples are ordered by level of difficulty so that students can see a
basic version of the concept being taught and then be introduced to further layers of complexity.
Figure 5 includes three examples from Chapter 18 Plotting Line & Scatterplots.
 Basic level, Example 18.1.1: only includes x and y coordinates plotted against each other
 Intermediate, Example 18.1.2: adds x/y axes labels and a title
 Advanced, Example 18.1.3: changes line and marker style/color, enforces x/y bounds,
adds a text label with arrowhead and leader line to a point of interest on the graph
Typically, the chapters present different versions of what advanced might mean so students begin
to understand the range of functionality that Python has to assist them with coding solutions for
structural engineering problems. Another advanced line plot can be found in Example 18.3.2 of
the manual (not shown here in the interest of space) which produces subplots of shear and
moment diagrams for simply supported and cantilever beam cases using a nested for loop.
The authors find that it is critical to build up student understanding gradually, rather than
presenting the advanced example at the onset as this can be overwhelming and not clear how
each code segment is impacting the output.
(a)

(c)

(b)

Figure 5. Progressive Example Complexity: Line Plot (a) Basic, (b) Intermediate, (c) Advanced

Graphics to Explain Variable Structure and Decision-Making Logic

Engineering students are taught to draw figures like free body diagrams as a visual tool to
describe the loads on a structure to help them complete their associated calculations of reactions,
shear, moment, and so forth. This practice of drawing diagrams can and should be extended to
sketching diagrams to understand variable structure and coding logic, prior to writing any code.
An example for understanding variable structure, Figure 6 shows code and a simple figure from
Example 7.2.1 in the manual which illustrates the structure of a list by labelling the index value
of each entry and using an arrow with tail and head to indicate which of those entries’ index
values falls within the selected range to be printed. This logic can be extended to extracting the
correct matrix entries in static condensation that would be relevant for matrix structural analysis
or in structural dynamics type problems.
Figure 6. Code & Graphic for Understanding Variable Structure: Slicing a List

An example related to decision-making logic can be drawing a flowchart to understand how an


if, elif, else statement executes multiple conditional statements in a set order, each of which
includes Boolean operators that evaluate to True/False. Figure 7 shows code and a flowchart
diagram for Example 11.3.2 in the manual to demonstrate to students how to apply logic to the
daily task of selecting what to wear based on the temperature.

Figure 7. Code & Graphic for Understanding Decision-Making Logic: If, Elif, Else Statement

In both scenarios, the aim is for students to make use of the simple examples from the manual
that model both drawing and coding skills to later apply this approach to more complex
structural engineering programming problems with greater confidence.

Assistance with Errors & Troubleshooting


One of the major struggles that new learners have with coding is debugging errors that arise
when running code they have written. Students have reported spending hours trying to decipher
what the error message means from asking classmates, conducting an internet search on the
message description, to inputting their code and the associated error message into Chat GPT [5].
Still there are cases where none of those efforts produces any meaningful results and they must
come to office hours for assistance. For these reasons, there have been efforts along the way to
provide examples in the Python manual that teach students about the common pitfalls and why
two ways of writing code that may appear equivalent to a human being are going to cause issues
in Python. Furthermore, there is an entire Chapter 23 Errors & Troubleshooting dedicated to this
topic. While by no means is it able to capture the breadth of all issues that may occur, it does
provide details on common error codes, potential causes, and suggestions of how to troubleshoot
the problem. Figure 8 shows one such common error code described in Section 23.2.1 and
Example 23.2.1.1 on SyntaxError.

Figure 8. Troubleshooting Common Error Codes: SyntaxError

There are also general troubleshooting tips, and Chapter 24 Where to Get Help & Additional
Resources provides many other platforms to get further Python information.

Motivation Stations
The most common question when learning new material for students of any age is: “why do I
need to learn this?” Which as they mature as learners transforms into: “what value will I have for
this [Python coding] when I enter my structural engineering career?” The motivation stations that
appear in various locations in the Python manual use the pre-project industry member survey
results and other anecdotes from practitioner applications of programming to answer that
question. The objective is to connect what students are learning in ARCE computing classes with
a potential use on a real-world engineering project. Figure 9 shows an example of a motivation
station that is found in Chapter 14 Accessing Files.
Figure 9. Motivation Station: Reading Files
Supplementary Files
Additional data input files and other support material for the Python manual are available in a
folder under the Supplemental Project Files of the Cal Poly @ Digital Commons entry [4].
Summary of ARCE 352 Student Assessment
At the end of the Fall 2023 quarter, a survey was distributed to students who had just completed
ARCE 352 to gauge their feedback on the course as whole and specifically the Python manual.
This was the first time that the manual, in its complete draft form, had been implemented in the
classroom setting. Feedback provided by students in real-time during the computing lab sections
as well as through this survey were considered in the edits for the final published version.
Comparisons to the Pre-Project Student Survey
Many of the questions are consistent with those in the pre-project student survey (PPSS).
Therefore, the distinctions between those sets of survey results will be discussed first. Note that
ARCE 352 is a first-quarter junior class and so students have much less programming experience
in the academic setting as well as limited exposure to observe the coding of applications or use
of commercial structural analysis software in industry.
For the 17 survey respondents, the proportion of students that had first introduced to any
programming language before undergraduate was nearly half that of the PPSS group at 4 (24%)
and the rest in undergraduate with 1 (6%) in freshman and 12 (71%) in sophomore years in the
CSC 231 course. Most respondents (88%) had taken sections of CSC 231 that used MATLAB,
but the remainder (12%) were in a pilot section using Python. Even with this pilot section that
had not been available to the PPSS students, a greater proportion (82%) of the current students
had not encountered Python until ARCE 352.
Figure 10 compares responses to 5-point Likert scale questions on student confidence for various
Python skills between the PPSS and ARCE 352 students. As before, “N/A” was still an option.
Figure 10. Pre-Project vs. ARCE 352 Student Survey: Confidence on Python Topics
(1 = Very Not Confident, 3 = Neutral, 5 = Very Confident)

In Figure 10, for most Python skills the PPSS students report a higher level of confidence, which
likely results from the fact they have more quarters of coding practice and also have encountered
programming assignments that more frequently use the more complex skills on the list. For
example, many ARCE 353 assignments require setting up and manipulating matrices, and in
ARCE 354 students create multiple functions in a separate file to compute dynamic response due
to various forcing functions. Instances where ARCE 352 students tend to rank higher in
confidence are skills required on nearly every assignment, like setting up lists containing variable
values and printing output to the command window or Excel.

Of the Python topics in Figure 10, students indicated additional focus in the Python manual be
provided for: (Priority #1) Plotting, (Priority #2) Lists, and (Tied for Priority #3) Nested For
Loops, If/Elif/Else Statements, and Utilizing Different Libraries. This shows some variation from
the PPSS students when asked which topics merited extra instruction time.
Figure 11 compares responses from a series of 5-point Likert scale questions related to student
confidence on various Python libraries between the PPSS and ARCE 352 students.

Figure 11. Pre-Project vs. ARCE 352 Student Survey: Confidence on Python Libraries
(1 = Very Not Confident, 3 = Neutral, 5 = Very Confident)

Figure 11 illustrates again that the PPSS students have higher to much higher confidence in many
libraries, except in cases where ARCE 352 had more frequent and recent exposure. Of the
Python libraries in Figure 11, students indicated a desire for added focus in the Python manual
for: (Priority #1) Matplotlib, (Priority #2) Pandas, and (Priority #3) Numpy.

Figure 12 compares responses from series of 5-point Likert scale questions related to student
confidence on implementing ARCE 352 concepts in Python between the PPSS and ARCE 352
students.

Figure 12. Pre-Project vs. ARCE 352 Student Survey:


Confidence on Coding ARCE 352 Topics in Python
(1 = Very Not Confident, 3 = Neutral, 5 = Very Confident)
In Figure 12 the ARCE 352 versus PPSS students have similar to slightly higher confidence,
because they just covered these topics rather than at least being 3+ quarters removed from having
learned and developed code for these items. Examining the ARCE 352 student results in Figures
10-12 indicates that, like the PPSS cohort, there are a limited number of Python skills or topics
that they felt confident in (≥ 4.00) which is understandable given that these are new learners,
most of whom had to switch from MATLAB to Python syntax during the Fall 2023 quarter.
In terms of seeking help with their coding, ARCE 352 versus PPSS students indicated a slightly
different rank order of resources they used to problem-solve code. Most common was reaching
out to friends, then utilizing faculty office hours tied with conducting internet searches, followed
by referencing the Python manual, using Chat GPT, finding other textbooks, and lastly viewing
YouTube videos. It is worth noting that students are already trying to leverage artificial
intelligence (AI) language tools like Chat GPT to assist with troubleshooting errors in their code.
To date, teaching students how to harness and maximize the utility of these assistive tools –
within the bounds of academic and professional integrity – has been outside of ARCE computing
curriculum and merits further investigation. When asked what supplementary learning resources
would be helpful to provide considering that the Python manual is now available, student
responses were: YouTube or other video tutorials (47%), additional refinement of the Python
manual (35%), game website to practice coding (18%), and more troubleshooting resources
(6%). Since students could select multiple options, responses can sum to > 100%.

Like in the PPSS version, this survey contained industry-related questions. A much lower
proportion (37.5%) of ARCE 352 students had completed a summer internship in the AEC field
and only one had programmed in Excel. Again, there was far greater diversity and frequency of
use of commercial structural analysis software (in rank order: ENERCALC, RISA, Simpson
Strong-Tie, ETABS, etc.). Despite a limited number of these juniors having had internships and
coding in a work setting, they had a slightly higher perception than the PPSS cohort of
programming usage in industry, both in general and Python specifically. This response did not
seem to be as negatively impacted even given these new learners reported enjoying programming
work less, find it more difficult, and put more time in than for their other coursework.

Feedback on the Python Manual


Beyond the feedback students provided about additional coverage in the Python manual on items
listed in Figures 10 and 11, students were asked about the frequency of use and assessment of
various characteristics of the manual. Slightly more than half of survey respondents indicated
that they used the manual for 0-25%, while the remainder used them for 25-50% of the ten lab
assignments during the quarter. It should be noted that some skills taught by the instructor during
the lab session had no coverage in the draft version of the manual, and that the survey question
posed on utilization frequency may not capture how students may reuse prior knowledge gained
from using the manual on earlier labs.
Figure 13 presents results from 5-point Likert scale questions for students to assess different
qualities of the draft Python manual.
Figure 13. ARCE 352 Student Survey: Assessment of Draft Python Manual
(1 = Poor, 3 = Average, 5 = Excellent)

The results indicate an above average rating for the draft Python manual in all categories.
However, the in-person student questions during the Fall 2023 ARCE 352 sessions and office
hours about coding the assignments in general, and specifically on the manual, was far more
informative to the editorial process that took place in three major phases – September,
November, and December 2023. These student comments led to modifications in:

 Useful Coding Examples: update of example introductions to be more descriptive of the


specific problem being solved, addition of in-line comments to explain the function of
blocks of code, revision or removal of lines of code that resulted in confusion, use of
consistent naming conventions across examples when possible, and verifying accuracy
of all input and output for all examples.
 Suggestions for Other Resources: adding links to additional website and video tutorials
throughout the document and particularly in the Chapter 24 Where to Get Help &
Additional Resources.

Summary of Student Co-Author Outcomes


Creating essentially a textbook for a three-course programming sequence is rather a unique and
challenging undertaking as a senior project. It requires an investigation and command of the
subject matter to teach clearly and succinctly, as the student co-authors had themselves
experienced or witnessed the struggles of coding in the ARCE 352-354 and wanted to support
others in their future efforts. The students were the primary authors of the Python manual: they
developed the organization and graphical standards that would make a cohesive product among
all the chapters assigned to different team members, researched and wrote the explanations to
introduce the topics, devised the coding examples, provided editorial review to one another on
content, and many more tasks from the pre- to post-surveys during the year. The faculty member
had a secondary role serving as an advisor drawing on their teaching experience to outline the
necessary topics; meeting weekly with the student team to provide feedback to improve clarity in
explanations, figures, code examples; and in the end deploying the manual in the ARCE 352
class to gather feedback that would inform the final technical editing of the entire package.
The resulting Python manual is a clear demonstration that students are driven when they know
the real impact that their project deliverable can have on others; that they can develop effective
technical communication skills with continued practice; and that with their perspective as recent
learners they have empathy, clarity, and creativeness to write what is likely the most effective
textbook of all. Certainly, an idea to take into consideration as engineering methods and
curriculum changes will necessitate new instructional material – the power of student authors.
Future Work
A number of topics have been identified as future topics based on experiences in the Fall 2023
offering of the ARCE 352 either as items covered by the instructor during lab sessions that was
not in the manual, from student questions in class or office hours, or during grading of lab
assignments. A selection of these topics include:
 Sympy functions to solve a system of equations (for example, in solving for rotations
using the slope-deflection equation, as an alternative to setting up matrices)
 Pandas example to create an Excel workbook with multiple sheets including visual
formatting (for example, in developing tables storing values for each member when
calculating displacement at a truss joint using virtual work, as an alternative to xlswriter)
 More complex examples of dictionaries to store values and line plotting to show
animations of iterative solutions (for example, Newton Raphson method to analyze a
truss with material/geometric nonlinearity in graduate level structural behavior classes)
 Guidance using Chat GPT to troubleshoot error codes including appropriate academic
and industry applications, etc.
In addition to new or more advanced coverage of topics, there are also many more examples
from the pre-project industry member survey that can be integrated into more Motivation
Stations. At present, there are very few examples in the manual due to prioritizing necessary
learning content and examples to support students in ARCE 352-354.
The Python manual has been shared with other Cal Poly ARCE instructors who consistently
teach courses in the ARCE 352-354 sequence, and the plan is to continue to solicit feedback
from them on existing or proposed content. Beyond that, external users from other institutions
should feel free to reach out to the faculty co-author with questions, to share how they utilized
the Python manual in their classes, or any constructive feedback so that future student team
members can be recruited to learn and educate by developing updates to this living, public
resource.
Acknowledgements
The authors would like to thank faculty member Peter Laursen, PhD, PE for his technical review
and feedback on the Python manual. They would also like to acknowledge all the students and
industry professionals who provided valuable feedback through the pre-and-post project surveys.
References
[1] Spyder IDE. https://spyder-ide.org
[2] Gilat, A. (2016). Matlab: An Introduction with Applications. 6 th Edition. Wiley.
[3] Moore, H. (2008). Matlab for Engineers. 2nd Edition. Pearson Education.
[4] Dewey, A., Gomez, K., M. Yee (2023). Python Manual: A Learning Guide for Structural Engineering
Students. Report, California Polytechnic State University in San Luis Obispo, CA.
[5] Chat GPT – Open AI. https://openaicom/chatgpt

You might also like