Тёмный

Software Design Introduction 

Jakob Jenkov
Подписаться 40 тыс.
Просмотров 5 тыс.
50% 1

Great software design makes a big difference in how easy that software is to use, develop, test etc. Yet, software design is hard to do well. One of the challenges is, that I don't believe we always think constructively about software design. We may sometimes just follow a recipe someone else made, rather than do our own design thinking.
In this introduction to software design I lay out some of the fundamentals of how to think about software design. Later videos will dive deeper into many of the concepts mentioned in this video.
Chapters:
0:00 Software Design Introduction
0:45 What is Software Design?
1:05 Functional and Structural Design
1:32 Functional vs. Structural Design
3:10 Functional Specification is Abstract - Structural Design is Concrete
3:54 Software Design vs. Software Architecture
4:54 Design Choices are Trade-offs
5:26 Design Trade-offs can be Temporal
6:47 How do We Design Software Then?
7:02 Software Design Philosophies
7:22 Conscious Design
7:53 Beware of Design Doctrines
8:45 Software Design Summary
Social Media:
Twitter: @jjenkov
LinkedIn: / jakob-jenkov-4a3a8
Software Design Introduction - text:
jenkov.com/tutorials/software...
Software Design - playlist:
• Software Design
#softwaredesign #softwaredevelopment #software

Наука

Опубликовано:

 

28 июн 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 22   
@kzelmer
@kzelmer Год назад
After reading all your multithreading posts in your website (best Java multithreading explanation hands down) I know that everything you post is gold, so here I am again :)
@JakobJenkov
@JakobJenkov Год назад
Thank you !!! 😊
@-boiadeiro-
@-boiadeiro- Год назад
100% true
@lrzero1362
@lrzero1362 Год назад
You are awesome Jakob! Your videos are extremely helpful. Is it possible if in the future you can do one about SOLID principles
@JakobJenkov
@JakobJenkov Год назад
Yes, I will make a video about SOLID later in this series 😊
@lrzero1362
@lrzero1362 Год назад
@@JakobJenkov Thanks, I appreciate it
@personalaccount1515
@personalaccount1515 Год назад
Dude i am 100% agree whit you. As always great job TY
@JakobJenkov
@JakobJenkov Год назад
Thank you ! ... and you are welcome !! 😊
@-boiadeiro-
@-boiadeiro- Год назад
Very interesting as always, thanks.
@JakobJenkov
@JakobJenkov Год назад
Thank you !!
@aibeka.9453
@aibeka.9453 Год назад
👍
@FrederickAlvarez_
@FrederickAlvarez_ 4 месяца назад
came here from your LinkedIn post
@JakobJenkov
@JakobJenkov 4 месяца назад
Great ! Hope you liked it ! :-)
@cccc2740
@cccc2740 Год назад
Does it mean we have software architecture only for distributed systems?Something like a text editor wont have it?
@JakobJenkov
@JakobJenkov Год назад
According to my definition, yes. But other people might disagree.
@cccc2740
@cccc2740 Год назад
@@JakobJenkov Ok. Very different take, I would say
@rifatsl
@rifatsl 11 месяцев назад
I don’t think you need to have a distributed system to have a software architecture. If your text editor consists of more than one module and these modules have interfaces, you can very well have a software architecture to define the relationships between these modules. I should note that if you are working on a small project all by yourself, 99% of the time any software engineering effort is a wasted effort. Software engineering is like an investment and you can only benefit from it if you have a multi-person and multi-version project.
@cccc2740
@cccc2740 11 месяцев назад
@@rifatsl you meant to say something like indie games are waste of efforts?
@rifatsl
@rifatsl 11 месяцев назад
No, I said software engineering effort would be useless in that scenario, I didn’t say software implementation effort would be useless. The difference between them is the “Engineering” part. Software Engineering != Programming Simply implementing a software project without doing proper software engineering can be more resource efficient if that project is a single-person and single-version project. Single-version means no maintenance is required. Therefore, code quality doesn’t matter anymore. Single-person means no communication required. Therefore, code readability doesn’t matter anymore.
@rifatsl
@rifatsl 11 месяцев назад
Hi Jakob, I would like to start by saying that I really enjoyed watching your content on multithreading. I wanted to give some feedback for this video though. I think you are trying to come up with software engineering definitions and processes from your own experience. Almost all of the ideas you shared were formalized in software engineering books many years ago. I don’t think the information you shared is incorrect but people can find better structured information on other resources. For example, you are comparing software design with software architecture but it is widely accepted that software design is a meta terminology which includes both high-level(architectural) and low-level design. Therefore, comparing high and low level design would be more appropriate. Also, I felt like you are mixing up software requirements analysis and software design stages. The result of the former is a software requirements specification document which ideally should not contain implementation details. I can give you more and more examples but in short, I think the information you shared could be better structured and they were already formalized in the past. Thank you for the video.
@JakobJenkov
@JakobJenkov 11 месяцев назад
Hi, thank you for your feedback! I would appreciate if you could list some of the books you feel that have already formalized this. I will be reading a bood bunch of software design books during the making of this series. I have already read some - but I can always scan a few more :-) Yes, you are right that I am trying to formalize the concept of "software design" based on how I have experienced it being done in practice today, rather than what some theoretical book / philosophy has to say about the topic 20 years ago. But - my formalization is not just based on my own perception. I have heard several developers with 20+ years of experience talk about "software design" and refer to the design of the functionality - the part which you call the "software requirement analysis". That is what we used to call it - but people that work with that will often refer to it as "design". They feel they are "designing" a solution to a business problem. And the developers that take over that solution specification feel they "design" an implementation of that solution specification. Who of them are right? Who has the right to claim they do "design" ? That is why I believe it is better to talk about "functional design" and "structural design" - rather than "requirement gathering and analysis" and "software design". After all - "solution architects" does "architect" (design) a solution - even if in the abstract - don't they? The purpose of this video - and future videos about this topic, is _not_ to simply repeat what others have already said about the topic, but to come up with a conceptual frame which I find to be more useful than the old conceptual frames. Some of what I don't like about earlier books I have read on this topic is that the books tend to describe the functional design phase as a separate, early phase of the development. In iterative development though, functional requirements are gathered iteratively - which also means that software design has to be done iteratively - which is something books about agile software development often mention is necessary, but do not really formalize how to do. How do we continously work with software design - and thus redesign also? I will be exploring that that in later videos. Both "software design" and "software architecture" could be said to have a "high level" and a "low level" (and a "mid level") aspect to them. I have heard (and read) developers refer to "software architecture" as both a high level and low level actvity too. Some developers use the term "software architecture" when discussing the internal patterns or design archetypes the software uses. So - which is which? The terms are not clearly defined - and some use them differently than what you claim they mean. That is why I clarify what _I_ mean when I refer to software design and archtitecture. But as I also mention in the video, there are no formal, clear distinctions between the two. Design could contain architecture - and architecture could contain design. By the way, Object Oriented Analysis and Design (OOAD) was also already "formalized in the past" - but it is unfortunately not very useful in practice - exactly because those ideas make the mistake of believing that structural design is derived from functional specification. In practice, however, most structural design is not derived from the functional specification. I make a habit of challenging all older ideas that I do not really feel are representative of reality today. If a concept is not clearly defined - I will put my own definition to it - while using it - or my information would become fluffy - unclear. There is a lot more I could say - but I will be saying it in future videos about software design. I am not done yet :-) But you are right - I _am_ breaking up the old definitions and attempt to come up with a new set of definitions I feel are more representative of what I personally see going on out there - than the definitions in the old books.
@rifatsl
@rifatsl 11 месяцев назад
@@JakobJenkov I would recommend reading SWEBOK and Software Engineering by Ian Sommerville if you haven’t already.
Далее
Вечный ДВИГАТЕЛЬ!⚙️ #shorts
00:27
APPLE совершила РЕВОЛЮЦИЮ!
0:39
Просмотров 4,2 млн
Самый СТРАННЫЙ смартфон!
0:57
Просмотров 32 тыс.