Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Updating my branch with main #329

Merged
merged 325 commits into from
Nov 30, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
325 commits
Select commit Hold shift + click to select a range
7d0ee7b
Update Tech_Stacks.md
ShlomoAlon Nov 29, 2023
d3311c1
Small change to example code
AlbertYS Nov 29, 2023
e620ec9
Added link to Tkinter.md in Tech stacks file
AlbertYS Nov 29, 2023
d6c1bc2
Merge branch 'main' into origin/Introduction_to_Tkinter
AlbertYS Nov 29, 2023
8bb7e51
Create time_management.md
lisacheng12 Nov 29, 2023
1f67646
Create Beautiful Soup.md
Kluckyyou Nov 29, 2023
9f4d042
Create clean_coding_styling.md
foyarekhua Nov 29, 2023
beebda8
Update Metaprogramming.md
ShlomoAlon Nov 29, 2023
e47eb4d
Update Metaprogramming.md
ShlomoAlon Nov 29, 2023
50aa037
Update Metaprogramming.md
ShlomoAlon Nov 29, 2023
904ff78
Update Metaprogramming.md
ShlomoAlon Nov 29, 2023
2b10055
Added subsection on asking for help to get started
ANQ-Nguyen Nov 29, 2023
429a508
Upload the draft of Node.js Intro and graphics
Krystal-Miao Nov 29, 2023
f102ee4
Updated heading and provided examples.
jchang0112 Nov 29, 2023
16a1941
update the file based on suggestions
Nov 29, 2023
f48bad1
create kanban introduction for software engeneering wiki
Tommy-Gong Nov 29, 2023
10df7cb
initial draft of swagger API documentation
dianzrong Nov 29, 2023
0b79d76
link swagger API doc to dev process pg
dianzrong Nov 29, 2023
031ab3f
Added initial entry for Puppeteer page
celinayueh Nov 29, 2023
458b843
Merge branch 'main' into origin/Introduction_to_Tkinter
AlbertYS Nov 29, 2023
fab43a5
Update Professionalism.md Structure and Grammar
molplu Nov 29, 2023
ab0ac36
Update Professionalism.md Additions to the Ethics Section
molplu Nov 29, 2023
ad22f26
Update Professionalism.md Added Importance and Fixed Up Additional Re…
molplu Nov 29, 2023
5afa4b2
Update Professionalism.md Format Fixes
molplu Nov 29, 2023
5cde87a
Merge branch 'learning-software-engineering:main' into main
Jesse-Na Nov 29, 2023
cf3e88f
Add more detail for WebDriver section
jfitzgerald1126 Nov 29, 2023
c993647
Add example code to automation section
jfitzgerald1126 Nov 29, 2023
320f39d
changes made after review
Nov 29, 2023
0767f92
Create Integrating_UX_Design_in_Software_Engineering.md
yuanjiat Nov 29, 2023
f6da8b7
Create Mockaroo_Guide.md
hzc011213 Nov 29, 2023
aa16701
Update Integrating_UX_Design_in_Software_Engineering.md
yuanjiat Nov 29, 2023
6b6a94c
Update Integrating_UX_Design_in_Software_Engineering.md
yuanjiat Nov 29, 2023
45e56d6
Update clean_coding_styling.md
foyarekhua Nov 29, 2023
7bfaf54
Update time_management.md
lisacheng12 Nov 29, 2023
bd85828
Create time_management.md (#274)
lisacheng12 Nov 29, 2023
5d5ebd1
Update Integrating_UX_Design_in_Software_Engineering.md
yuanjiat Nov 29, 2023
170bfdd
Update Lean.md
ThomasShimUoft Nov 29, 2023
d751de1
Create Integrating_UX_Design_in_Software_Engineering.md (#287)
yuanjiat Nov 29, 2023
97fabb3
update md file according to the suggestions
Nov 29, 2023
99378d7
Update Mockaroo_Guide.md
hzc011213 Nov 29, 2023
9795eb4
Update Software_Engineering.md
ThomasShimUoft Nov 29, 2023
9028c03
Merge branch 'main' into ThomasShimUoftResolveConflict
ThomasShimUoft Nov 29, 2023
20173b5
Update Software_Engineering.md
ThomasShimUoft Nov 29, 2023
e81261f
Adding Introductory description to Lean Methodology (#106)
ThomasShimUoft Nov 29, 2023
6932ead
Update Mockaroo_Guide.md
hzc011213 Nov 29, 2023
1220c95
Create Mockaroo_Guide.md (#290)
hzc011213 Nov 29, 2023
b869b53
Finish clean_coding_styling.md
foyarekhua Nov 29, 2023
4122ecc
Update Development_Process.md
foyarekhua Nov 29, 2023
c85671a
Update Development_Process.md
foyarekhua Nov 29, 2023
05563a9
Merge branch 'main' into clean-coding
foyarekhua Nov 29, 2023
4421e83
Update Professionalism.md Added Business Communication Section
molplu Nov 29, 2023
b45e7e5
Update Metaprogramming.md
ShlomoAlon Nov 29, 2023
6a242e4
Merge branch 'main' into Metaprogramming
ShlomoAlon Nov 29, 2023
38b4841
Metaprogramming in python (#271)
ShlomoAlon Nov 29, 2023
a37609f
add example for SOLID
Christina0313 Nov 29, 2023
5b56187
[+] Added comparisons to pipenv and virtualenv
Lei-Tin Nov 29, 2023
dae3dc4
[+] Added external references for Conda
Lei-Tin Nov 29, 2023
47f4570
Added initial commit
Lei-Tin Nov 29, 2023
6262824
Update OpenShift.md
thakertanya Nov 29, 2023
13c8987
Update OpenShift.md
thakertanya Nov 29, 2023
22e3622
Merge branch 'learning-software-engineering:main' into main
thakertanya Nov 29, 2023
44a24ff
Update Tech_Stacks.md with link to Openshift
thakertanya Nov 29, 2023
d29dae8
Create fork_and_pipe
JacqJingyuH Nov 29, 2023
45ded24
Rename fork_and_pipe to Fork_and_Pipe
JacqJingyuH Nov 29, 2023
ca00a38
Rename Fork_and_Pipe to Fork_and_Pipe.md
JacqJingyuH Nov 29, 2023
43c3aeb
changed table of contents
JacqJingyuH Nov 29, 2023
592f742
Create Multithreading in Java
XavierQuan Nov 29, 2023
7ce7565
Rename Multithreading in Java to Multithreading.md
XavierQuan Nov 29, 2023
f7af7c9
linked to index page
JacqJingyuH Nov 29, 2023
1a7e4fa
added diagrams
JacqJingyuH Nov 29, 2023
f5445fa
Add comparative analysis with other platforms
HanliJiang13 Nov 29, 2023
3118f08
Vercel_Frontend_Deployment (#205)
HanliJiang13 Nov 29, 2023
2811a44
Created topic + layout
rowanArora Nov 29, 2023
ba906de
edit Kanban Info
Tommy-Gong Nov 29, 2023
6d074e4
Introduction to Conda (#165)
Lei-Tin Nov 29, 2023
1adcbc3
Made requested changed from Jessica to include a few things to avoid …
ANQ-Nguyen Nov 29, 2023
fd1abe7
fixed formatting issues
ANQ-Nguyen Nov 29, 2023
39e0fb5
Create Reactstrap file
rileymccarron Nov 29, 2023
e41b7ad
Review changes clean_coding_styling.md
foyarekhua Nov 29, 2023
47868e0
Update clean_coding_styling.md
foyarekhua Nov 29, 2023
0e5c369
Update clean_coding_styling.md
foyarekhua Nov 29, 2023
f91f70a
Update clean_coding_styling.md
foyarekhua Nov 29, 2023
2504bd2
Update clean_coding_styling.md
foyarekhua Nov 29, 2023
b8bd13f
Update clean_coding_styling.md
foyarekhua Nov 29, 2023
a7aa53c
added code example and other IPC approach
JacqJingyuH Nov 29, 2023
629835e
Update and rename Reactstrap to Reactstrap.md
rileymccarron Nov 29, 2023
9f3fe48
Update Reactstrap.md
rileymccarron Nov 29, 2023
33e35bd
Update Reactstrap.md
rileymccarron Nov 29, 2023
148e310
Update Reactstrap.md
rileymccarron Nov 29, 2023
9c0a0b3
First draft of [Asking For Help] Section (#253)
AndrewNQN Nov 29, 2023
71997f3
Clean coding (#293)
angelala3252 Nov 29, 2023
f9ac3d2
Update handling criticism and feedback section in Professionalism.md …
Jesse-Na Nov 29, 2023
8ceef5c
Merge branch 'main' of https://github.com/Jesse-Na/learning-software-…
Jesse-Na Nov 29, 2023
9c71fba
Fixed links
wang-henry Nov 29, 2023
63764a9
Fixed links (#307)
wang-henry Nov 29, 2023
6e9c6b4
Update Machine_learning_Python.md
patelhrid Nov 29, 2023
329a933
change file structure and add info about ORM
angelala3252 Nov 29, 2023
6180583
add link to django
angelala3252 Nov 29, 2023
b1d7b4d
Intro to ML in Python Topic (#249)
Spaghetti-12 Nov 29, 2023
379e8db
Update Multithreading.md
XavierQuan Nov 29, 2023
26bc4b2
add how to define a model
angelala3252 Nov 30, 2023
374c163
intro to api
dianzrong Nov 30, 2023
b92a367
add migrations
angelala3252 Nov 30, 2023
51114c2
Update Multithreading.md
XavierQuan Nov 30, 2023
054ff9c
uncomment embedded pictures
Tommy-Gong Nov 30, 2023
cd26e76
Update Multithreading.md
XavierQuan Nov 30, 2023
985f702
add tables of titles of this page
Krystal-Miao Nov 30, 2023
7064117
querying objects
angelala3252 Nov 30, 2023
19ca93f
add info about runserver
angelala3252 Nov 30, 2023
c5292fe
Update Multithreading.md
XavierQuan Nov 30, 2023
7705a25
Create Multithreading in Java (#301)
ChenJiang03 Nov 30, 2023
fd8724d
change the port 3000 typo and pkg package
Krystal-Miao Nov 30, 2023
643514d
Update Beautiful Soup.md
Kluckyyou Nov 30, 2023
d3b1acc
add detailed implementation steps
Tommy-Gong Nov 30, 2023
2b9793e
format change
Tommy-Gong Nov 30, 2023
1066aac
[+] Introduction to myplotlib especially pyplot
Teinble Nov 30, 2023
460c6e9
Merge branch 'learning-software-engineering:main' into main
Jesse-Na Nov 30, 2023
70b22fd
Update Professionalism.md with handling criticism and feedback sectio…
Jesse-Na Nov 30, 2023
4e8799e
Completed first draft of my Assignment 2 topic
rowanArora Nov 30, 2023
9ec6a35
discuss standardize more in api doc
dianzrong Nov 30, 2023
acc61ca
merge main
dianzrong Nov 30, 2023
58ea282
[+] Remove space in all file names.
Teinble Nov 30, 2023
b006f9d
Upload the draft of Node.js Intro and graphics (#278)
Krystal-Miao Nov 30, 2023
2abf9ce
[+] Introduction to myplotlib especially pyplot
Teinble Nov 30, 2023
f02f804
Add Kanban Introduction and Methodology (#304)
Tommy-Gong Nov 30, 2023
2c057a3
Merge branch 'main' into main
yumozi Nov 30, 2023
b394c96
[+] Remove space in all file names.
Teinble Nov 30, 2023
ea08aee
Clarify migrations, runserver, and fix grammar
angelala3252 Nov 30, 2023
0dc54a6
update ORM and model definition sections
angelala3252 Nov 30, 2023
ec8ad83
Add Linear and Jira comparison
yumozi Nov 30, 2023
d0cacfe
add example for SOLID
Christina0313 Nov 30, 2023
f458fff
Merge branch 'main' into christinalan/SOLID-principle
Christina0313 Nov 30, 2023
db5380f
Added screenshots for guidance
yumozi Nov 30, 2023
1766220
Update Beautiful Soup.md
Kluckyyou Nov 30, 2023
24ea6d9
Adding Linear.app to Task_Management_Software.md (#108)
yumozi Nov 30, 2023
dff7d20
Update to newest version, fix the spacing
Christina0313 Nov 30, 2023
8fb26ed
Update Reactstrap.md
rileymccarron Nov 30, 2023
30659ee
add more detailed definition
Christina0313 Nov 30, 2023
ff47793
Added impact of feedback
jchang0112 Nov 30, 2023
8b3f492
Update Beautiful Soup.md
Kluckyyou Nov 30, 2023
e24d748
Update Reactstrap.md
rileymccarron Nov 30, 2023
0a92a18
Update Reactstrap.md
rileymccarron Nov 30, 2023
d64990e
Added destructive feedback example
jchang0112 Nov 30, 2023
405918b
Update Reactstrap.md
rileymccarron Nov 30, 2023
4542a72
Merge branch 'main' into jchang0112-Feedback
jchang0112 Nov 30, 2023
2945f6e
Create Beautiful Soup.md (#275)
Kluckyyou Nov 30, 2023
2d3bfff
Update Reactstrap.md
rileymccarron Nov 30, 2023
0408646
Added content to the Giving and Receiving Feedback section (#256)
jchang0112 Nov 30, 2023
3c7e956
Update Reactstrap.md
rileymccarron Nov 30, 2023
6ea488d
Update Reactstrap.md
rileymccarron Nov 30, 2023
e3ca600
add example for SOLID (#295)
Christina0313 Nov 30, 2023
3a9c029
Update Reactstrap.md
rileymccarron Nov 30, 2023
8ca2365
removed .DS_Store
Teinble Nov 30, 2023
13d9dcf
Update Reactstrap.md
rileymccarron Nov 30, 2023
90bd378
Modified Markdown based on the review. Add .gitignore for .DS_Store
Teinble Nov 30, 2023
9b436a9
Fix Beautiful Soup.md bug
Kluckyyou Nov 30, 2023
1202183
Merge pull request #1 from Kluckyyou/Kluckyyou-patch-1
Kluckyyou Nov 30, 2023
9fcec15
Update Reactstrap.md
rileymccarron Nov 30, 2023
7be4970
Update Reactstrap.md
rileymccarron Nov 30, 2023
a668cd4
Update React_Bootstrap_modals.md
maxXu0713 Nov 30, 2023
39f6f4b
Fix Beautiful Soup.md bugs (#315)
Kluckyyou Nov 30, 2023
4bccdc9
feedback
maxXu0713 Nov 30, 2023
1b6a1e0
variant explanation
maxXu0713 Nov 30, 2023
f691bb8
grammar
maxXu0713 Nov 30, 2023
bdc2c76
remove typo
dianzrong Nov 30, 2023
c81ccaa
merge dev process md
dianzrong Nov 30, 2023
ce9240b
Merge branch 'api-docs' of https://github.com/learning-software-engin…
dianzrong Nov 30, 2023
be56dce
resolve merge conflicts
dianzrong Nov 30, 2023
fb6c808
Create page on API documentation with Swagger (#279)
dianzrong Nov 30, 2023
200d674
update table of contents
Nov 30, 2023
78b0b9f
Added links, real world examples, and a conclusion
celinayueh Nov 30, 2023
4cce4b6
Getting Started With Kafka (#207)
Nov 30, 2023
3fe2061
Changed the file as requested
JY3150 Nov 30, 2023
3fe5500
Merge branch 'jiawei/design_patterns' of https://github.com/learning-…
JY3150 Nov 30, 2023
bc9f2cb
Design Patterns (#211)
JY3150 Nov 30, 2023
cf4b9c8
add instruction on potential connection failure
PenguinKuo007 Nov 30, 2023
1e424c8
Merge branch 'main' into kuan-lin-kuo/apache-database
PenguinKuo007 Nov 30, 2023
d2872b6
Updates to intro_to_shell to match descriptions
Lei-Tin Nov 30, 2023
847786e
Update Unity_Tutorial_2D_TopDown_Character_Controller.md
PyroPoro Nov 30, 2023
2712419
Fixed relative paths
Lei-Tin Nov 30, 2023
7bf5b7c
Intro to Shell (#297)
Lei-Tin Nov 30, 2023
f200dd0
Create React_Bootstrap_modals.md (#269)
maxXu0713 Nov 30, 2023
74d6545
Added Introduction to NumPy (#240)
m-grigoriu Nov 30, 2023
8588748
Create SQL-creating_database.md
kaavyakalani26 Nov 30, 2023
b9d1603
Merge branch 'main' into pyplot
Teinble Nov 30, 2023
8e252b9
Including Pyplot under Software_Tools. (#312)
JY3150 Nov 30, 2023
3b1f54a
Made updates based on reviews
rowanArora Nov 30, 2023
822bf26
Added Introduction to Graph Databases with Neo4j (#258)
amylyu1123 Nov 30, 2023
a933ed9
Update Professionalism.md Style Changes
molplu Nov 30, 2023
66f2252
Tried to fix the table of contents links
rowanArora Nov 30, 2023
b86625c
Adding explanation of client needs + style changes
ipekakyol Nov 30, 2023
cba8228
Update Professionalism.md Ethics Principle Title
molplu Nov 30, 2023
568acc6
Added my work to the software tools readme file
rowanArora Nov 30, 2023
fc26633
Add instruction on connecting to external database using Apache Super…
PenguinKuo007 Nov 30, 2023
d8d8fc2
Update SQL-creating_database.md
kaavyakalani26 Nov 30, 2023
af574e9
Update SQL-creating_database.md
kaavyakalani26 Nov 30, 2023
8b4f48f
Updated changes
AlbertYS Nov 30, 2023
4ebe516
Merge branch 'main' into origin/Introduction_to_Tkinter
AlbertYS Nov 30, 2023
f090da7
Origin/introduction to tkinter (#273)
AlbertYS Nov 30, 2023
cd005bf
Update Professionalism.md Added TOC
molplu Nov 30, 2023
9852931
Completed the work for my topic for Assignment 2
rowanArora Nov 30, 2023
10b2067
Merge branch 'main' into reactstrap-introduction
rileymccarron Nov 30, 2023
602e02f
Update SQL-creating_database.md
kaavyakalani26 Nov 30, 2023
3d25496
remove extra space
angelala3252 Nov 30, 2023
911f6d0
minor change
Nov 30, 2023
9c3230b
Update Reactstrap.md
rileymccarron Nov 30, 2023
d48d34f
Merge branch 'main' into main
khushaal-nandwani Nov 30, 2023
6e1b2c5
addded basics for angular in topics/techstacks (#133)
khushaal-nandwani Nov 30, 2023
d0dc6b9
Django ORM (#310)
angelala3252 Nov 30, 2023
562dd98
Update OpenShift.md fix typos
thakertanya Nov 30, 2023
e6ca90b
Update SQL-creating_database.md
kaavyakalani26 Nov 30, 2023
bb67461
Update SQL-creating_database.md
kaavyakalani26 Nov 30, 2023
c79f9d1
Update SQL-creating_database.md
kaavyakalani26 Nov 30, 2023
daf52af
Update SQL-creating_database.md
kaavyakalani26 Nov 30, 2023
a335150
Merge branch 'main' into main
thakertanya Nov 30, 2023
c240207
Create OpenShift Notes (#223)
thakertanya Nov 30, 2023
0f3795c
move Github Actions listing from teck stacks to development process (…
DeepSJain Nov 30, 2023
fbd9d64
Update Unity_Tutorial_2D_TopDown_Character_Controller.md
PyroPoro Nov 30, 2023
fd9d9b3
Update Unity_Tutorial_2D_TopDown_Character_Controller.md
PyroPoro Nov 30, 2023
9838623
Update SQL-creating_database.md
kaavyakalani26 Nov 30, 2023
5a67cbe
Update Unity_Tutorial_2D_TopDown_Character_Controller.md
PyroPoro Nov 30, 2023
f59dea4
Update Unity_Tutorial_2D_TopDown_Character_Controller.md
PyroPoro Nov 30, 2023
f0af109
Update SQL-creating_database.md
kaavyakalani26 Nov 30, 2023
0146f19
Add anchors and table of content
jfitzgerald1126 Nov 30, 2023
45edf37
Change table of contents link size
jfitzgerald1126 Nov 30, 2023
827054d
Fix getting started anchor
jfitzgerald1126 Nov 30, 2023
cd1e5e6
Unity top down character controller tutorial (#306)
PyroPoro Nov 30, 2023
ff55385
Update SQL-creating_database.md
kaavyakalani26 Nov 30, 2023
5ff4e3e
Merge branch 'main' into selenium
jfitzgerald1126 Nov 30, 2023
37292eb
Merge selenium topic to main branch (#266)
jfitzgerald1126 Nov 30, 2023
8a3bcdb
Update SQL-creating_database.md
kaavyakalani26 Nov 30, 2023
325cee3
Update Tech_Stacks.md
PyroPoro Nov 30, 2023
56951a9
Create SQL-creating_database.md (#321)
kaavyakalani26 Nov 30, 2023
0668526
Merge branch 'main' into Unity-top-down-character-controller-tutorial
PyroPoro Nov 30, 2023
dd4dd68
Update Tech_Stacks.md (#323)
PyroPoro Nov 30, 2023
ea09cf6
Update Reactstrap.md
rileymccarron Nov 30, 2023
46e993c
Update Tech_Stacks.md
rileymccarron Nov 30, 2023
c764857
Update Reactstrap.md
rileymccarron Nov 30, 2023
4c031ce
Reactstrap introduction (#316)
rileymccarron Nov 30, 2023
a4cd76e
Added initial entry for Puppeteer page (#280)
celinayueh Nov 30, 2023
84df090
Merge branch 'main' into jingyu/ipc_with_fork_pipe
JacqJingyuH Nov 30, 2023
8489493
IPC with fork and pipe in C (#299)
JacqJingyuH Nov 30, 2023
0a88924
add debugging and error handling section
Cathypei Nov 30, 2023
5441b22
add performance section
Cathypei Nov 30, 2023
60afe92
Add example implementation guide for react native component (#265)
Cathypei Nov 30, 2023
ec63323
Adding the topic to main User_Experience.md
ipekakyol Nov 30, 2023
1d3ac13
Fixed link
ipekakyol Nov 30, 2023
d5762b5
Merge branch 'main' into mollyplunkett/business_communication_profess…
molplu Nov 30, 2023
f34ceec
Adding Design_Requirements.md (#243)
ipekakyol Nov 30, 2023
fff48c8
mollyplunkett/business_communication_professionalism_overhaul (#294)
molplu Nov 30, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
74 changes: 74 additions & 0 deletions Design_Patterns.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
# Design Patterns for Beginners

## Introduction
Design patterns are solutions to common problems encountered in software design. They provide a 'systematic' yet creative way to design and solve problems. When you're building software, you often face similar challenges, and design patterns offer a way to address these challenges in an efficient manner.

### Why Design Patterns?

1. **Reusability:** Design patterns promote code reusability. Once you understand and implement a design pattern, you can apply it to different projects and scenarios. Note that it is not a piece of code for you to copy and paste, but a certain way of thinking and solving problems.
- But it is not the same as _algorithm_, whose input and output satisfy a certain specifications. Design Patterns are more creative and applicable in software development, in the sense that it does not require a strict specification on its input.

2. **Maintainability:** Using design patterns results in cleaner and more maintainable code. They encapsulate specific behaviors, making it easier to modify or extend functionalities without affecting the entire codebase.

3. **Scalability:** Design patterns contribute to scalable and flexible software architecture. They help in building systems that can adapt to changing requirements and scale gracefully.


## Types of Design Patterns

### 1. Creational Patterns
Creational patterns focus on object creation mechanisms, dealing with the process of object instantiation.

### 2. Structural Patterns
Structural patterns are concerned with object composition, forming relationships between objects to create larger structures.

### 3. Behavioral Patterns
Behavioral patterns define ways for objects to communicate, encapsulating patterns of communication between objects.

## Simple yet Powerful Example
We briefly introduce a **Creational Pattern** to demonstrate how powerful and flexible design patterns are.

Suppose we are developing a software where transportation tools are involved. At first, we only support cars and busses. But as our product grows, we have the need to support more types of transportation tools, like airplanes and boats, etc. We can certainly create more classes, like we did for cars and busses. But sometimes all we care about is that they are methods of transportation, i.e., they can take people from one place to another place. Let's call that behavior `move()`.

Thus, we may define a shared interface between among these classes
```python
class Vehicle:
def move(self):
...
```

We can then define
```python
class Airplane(Vehicle):
def move(self):
...
```
and
```python
class Car(Vehicle):
def move(self):
...
```


This way, we don't need to worry about the exact details of 'how a car/plane/bicycle' moves, but knowing that they support `move()` is good enough.


## Helpful resources
### Online Courses:
- **Coursera - "Design Patterns" by the University of Alberta:**
- This online course covers design patterns using Java. It includes video lectures, quizzes, and programming assignments to reinforce the concepts.

### Websites and Tutorials:

- **[Refactoring Guru - Design Patterns](https://refactoring.guru/design-patterns):**
- This website provides a comprehensive guide to design patterns with examples in multiple programming languages. **EXTREMELY RECOMMENDED!**


- **[DZone - Design Patterns Refcard](https://dzone.com/refcardz/design-patterns):**
- DZone offers a concise reference card on design patterns, providing a quick overview of essential patterns.

### Online Communities:

- **[Stack Overflow - Design Patterns Questions](https://stackoverflow.com/questions/tagged/design-patterns):**
- Stack Overflow is an excellent place to find answers to specific design pattern-related questions and engage with the programming community.

1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ Potential Topics--
3. SOLID Principles
4. Code Smells
5. QA testing
6. Introduction to Conda (Python)
- Professionalism
1. Customer engagement
1. Meeting best practices
Expand Down
65 changes: 57 additions & 8 deletions Topics/Development_Process.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,11 @@

### [Requirements.txt](./Development_Process/Build_Requirements/Requirements_txt.md)

## Github Actions

### [Introduction to Github Actions](./Development_Process/Github_Actions.md)


## Build tools
### [Introduction to ```make``` and Makefiles](./Development_Process/Introduction_to_make_and_Makefiles.md)

Expand All @@ -50,23 +55,60 @@

### [Serverless Computing](./Development_Process/Serverless_AWS_Lambda.md)

## Introduction to Shells

### [Introduction to using Shell](./Development_Process/Shell/intro_to_shell.md)

## SOLID PRINCIPLES:

SOLID is a mnemonic acronym that represents a set of five very important software development principles which lead to code that is easier to read, maintain, and extend, leading to higher-quality software that is easier to evolve over time.

The SOLID principles are:

- Single Responsibility Principle (SRP): A class should only have one cause to change, according to the Single Responsibility Principle (SRP). According to this theory, a class ought to have just one duty, which implies that there ought to be just one motivation for change. This makes the class more understandable, maintainable, and reuseable as well as more flexible.
#### Single Responsibility Principle (SRP):
- A class should only have one cause to change, according to the Single Responsibility Principle (SRP). According to the Single Responsibility Principle (SRP), each class or module should focus on a single concern, ensuring ease of understanding and modification.

- **Advantage**: This principle promotes maintainability by isolating responsibilities, reducing potential bugs caused by interconnected changes. Each class or module focuses on a single concern, making it easier to understand, test, and modify.

#### Open/Closed Principle (OCP)
- Software entities (classes, modules, functions, etc.) should be available for extension but closed for modification, according to the available/Closed Principle (OCP). It means system should be able to introduce new functionality without requiring changes to the existing code. Interfaces, polymorphism, and generalization are used to accomplish this.

- **Advantage**: OCP achieves stability by encouraging developers to create adaptable and scalable systems that accommodate changes through extensions rather than direct modifications. This promotes a more stable codebase and reduces the risk of introducing bugs in previously functioning code.

#### Liskov Substitution Principle (LSP)
- Subtypes must be able to be used in place of their parent types. According to this concept, it should be possible to swap out objects from a superclass for objects from a subclass without having any negative effects on the program's correctness. This necessitates abiding by the superclass's compact.

- **Advantage**: This principle fosters code reusability and allows for easier substitution of objects within the same inheritance tree. It simplifies maintenance, reducing the need for extensive modifications when introducing new objects or making alterations within the hierarchy. It ensures that system evolution remains agile and manageable without causing extensive disruptions to the existing codebase.

#### Interface Segregation Principle (ISP)
- This principle suggests that clients should not be forced to depend on interfaces they do not use. Instead of one large interface, it's better to have multiple smaller, specific interfaces that cater to the exact needs of the clients.

- Open/Closed Principle (OCP): Software entities (classes, modules, functions, etc.) should be available for extension but closed for modification, according to the available/Closed Principle (OCP). According to this principle, a system should be able to introduce new functionality without requiring changes to the existing code. Interfaces, polymorphism, and generalization are used to accomplish this.
- **Advantage**: Promotes flexibility and avoids unnecessary dependencies. This helps to avoid the creation of fat interfaces, which are interfaces that contain more methods than the client needs. Ultimately, ISP encourages a modular and precise approach to interface construction, contributing to better software architecture and maintainability.

- Liskov Substitution Principle (LSP): Subtypes must be able to be used in place of their parent types. According to this concept, it should be possible to swap out objects from a superclass for objects from a subclass without having any negative effects on the program's correctness. This necessitates abiding by the superclass's compact.
#### Dependency Inversion Principle (DIP)
- High-level modules should not depend on low-level modules. Both should depend on abstractions. Abstractions should not depend on details. Details should depend on abstractions. This principle suggests that classes should depend on abstractions rather than concrete implementations, which makes the system more flexible and easier to modify.

- Interface Segregation Principle (ISP): Clients should not be forced to depend on interfaces they do not use. This principle states that a client should not be forced to implement an interface if it does not use all of the methods defined by the interface. This helps to avoid the creation of fat interfaces, which are interfaces that contain more methods than the client needs.
- **Advantage**: Encourages loose coupling and easier maintenance of the system. This facilitates easier modifications, replacements, and testing, as changes in low-level modules don’t affect the higher-level ones.

- Dependency Inversion Principle (DIP): High-level modules should not depend on low-level modules. Both should depend on abstractions. Abstractions should not depend on details. Details should depend on abstractions. This principle suggests that classes should depend on abstractions rather than concrete implementations, which makes the system more flexible and easier to modify.
## Restaurant example of each principle

## Resource that gives examples of the uses cases of SOLID principles
#### SRP
Consider a **Chef** in a restaurant. Initially, the chef might handle multiple responsibilities: preparing dishes, managing inventory, and overseeing kitchen hygiene. Adhering to SRP, distinct roles are established. The chef focuses solely on cooking, while inventory management becomes the responsibility of a dedicated inventory manager.

#### OCP
Suppose a restaurant offers a fixed menu, and every addition or modification requires altering the entire menu preparation process. Adhering to OCP, the menu system can be designed with a base menu class that remains closed for modification. New dishes or changes are introduced via an extension, such as a SpecialsMenu class, allowing additions without altering the existing menu. This principle enables the restaurant to introduce seasonal or daily specials without affecting the core menu.

#### LSP
Imagine a scenario where the restaurant's system expects all orders to be instances of a generic Order class. Adhering to LSP, any specialized order, like a delivery order, dine-in order, or takeaway order, should be substitutable for a standard order without breaking the system's functionality. Each specific order type should adhere to the expected behavior of the generic Order class, ensuring seamless substitution.

#### ISP
Consider a system where all employees (servers, chefs, and cleaners) are expected to use the same comprehensive Employee interface, including methods for serving tables, cooking dishes, and cleaning. Adhering to ISP, distinct interfaces are established for each role: ServerInterface, ChefInterface, and CleanerInterface. This segregation ensures that each role implements only the methods relevant to their responsibilities, preventing unnecessary method implementations.

#### DIP
Suppose the restaurant's ordering system directly depends on specific external services for payment processing and inventory updates. Adhering to DIP, the system can depend on abstract interfaces like PaymentProcessor and InventoryService, allowing flexibility to switch between different payment processors or inventory management systems without directly impacting the core ordering system. This abstraction and dependency on interfaces rather than concrete implementations facilitate adaptability and system maintenance.


## Resource that gives example of actual code of SOLID principles

LINK : https://www.youtube.com/watch?v=_jDNAf3CzeY

Expand Down Expand Up @@ -101,14 +143,21 @@ This is only a simplification of what "Clean Architecture" is; the topic is so v

- A very detailed explanation of Clean Architecture by Robert C. Martin or Uncle Bob and his book

- https://www.youtube.com/watch?v=2dKZ-dWaCiU
- https://github.com/ropalma/ICMC-USP/blob/master/Book%20-%20Clean%20Architecture%20-%20Robert%20Cecil%20Martin.pdf
- https://www.youtube.com/watch?v=2dKZ-dWaCiU
- https://github.com/ropalma/ICMC-USP/blob/master/Book%20-%20Clean%20Architecture%20-%20Robert%20Cecil%20Martin.pdf

## Code Smells

### [Code Smells](./Development_Process/Code_Smells.md)

## Clean coding
### [Coding and commenting styles](./Development_Process/clean_coding_styling.md)

## Prompt Engineering
### [Basics of Prompt Engineering](./Development_Process/Prompt_Engineering.md)

## Technical Documents
### [Intro to Request for Comments (RFCs)](./Development_Process/Technical_Documents/Intro_to_rfcs.md)


### [API documentation with SwaggerHub](./Development_Process/Documentation/Swagger_API_Documentation.md)
Loading
Loading