Structural software design is IMO about how you structure your code base internally, meaning how you decompose it into smaller components, how you structure the interfaces of the components, and how the control flows between the components.
I have just published a short tutorial explaining my view on structural software design. I have also made a video version of that tutorial, for those of you that prefer video. The topics explained are still somewhat basic, but my software design series is starting to become more concrete at least, and soon also more advanced.
Structural Software Design - text:
https://jenkov.com/tutorials/software-design/structural-software-design.html
Structural Software Design - video:
https://www.youtube.com/watch?v=bj9DoZsu7Ls&list=PLL8woMHwr36HWMaOTIiWNf_fYYkZCHPxo&index=5r
#softwaredesign #softwareengineering #softwaredevelopment
I have just published a short tutorial explaining my view on structural software design. I have also made a video version of that tutorial, for those of you that prefer video. The topics explained are still somewhat basic, but my software design series is starting to become more concrete at least, and soon also more advanced.
Structural Software Design - text:
https://jenkov.com/tutorials/software-design/structural-software-design.html
Structural Software Design - video:
https://www.youtube.com/watch?v=bj9DoZsu7Ls&list=PLL8woMHwr36HWMaOTIiWNf_fYYkZCHPxo&index=5r
#softwaredesign #softwareengineering #softwaredevelopment
Jenkov
Structural Software Design
Structural software design is my term for the part of the software design that is concerned with the internal structure of the software. The division of the code into smaller components, and the control below between them, in other words.
Here are my notes about the SOLID design principles so far. I will probably be adding some comments to them over time, as I learn more about software design - but here is the first version:
https://jenkov.com/tutorials/software-design/solid.html
https://jenkov.com/tutorials/software-design/solid.html
Jenkov
The SOLID Principles
The SOLID principles are 5 principles that you can use to evaluate the quality of your software design.
I have just published what I currently believe are the core principles of what I call " Conscious Software Design ". There are still more details that need to be added over time - but I believe these three core principles are what is most important:
- Understanding
- Pragmatism
- Trade-offs
I am explaining in more detail what I mean, in this tutorial:
https://jenkov.com/tutorials/software-design/conscious-software-design.html
- Understanding
- Pragmatism
- Trade-offs
I am explaining in more detail what I mean, in this tutorial:
https://jenkov.com/tutorials/software-design/conscious-software-design.html
Jenkov
Conscious Software Design
Conscious software design is a design philosophy that emphasizes understanding your root design goals, designing explicitliy for these goals, and accept that each design decision you have to make is a trade-of.
I have updated the article above with a list of consciousness levels I believe we developers often operate at. These are:
- Oblivious
- Unconscious
- Subconscious
- Conscious
What exactly these levels mean is now described in the article linked to in the previous post!
- Oblivious
- Unconscious
- Subconscious
- Conscious
What exactly these levels mean is now described in the article linked to in the previous post!
If you are doing performance optimization in Java, sometimes you will need to write some "microbenchmarks" that measure how fast a given implementation runs. Doing that so that the benchmarks actually measures the implementation fairly - is not easy! The Java Microbenchmark Harness (JMH) can help you out here!
My Java Microbenchmark Harness (JMH) tutorial explains how to use it, and how to write micro benchmarks.
https://jenkov.com/tutorials/java-performance/jmh.html
My Java Microbenchmark Harness (JMH) tutorial explains how to use it, and how to write micro benchmarks.
https://jenkov.com/tutorials/java-performance/jmh.html
Jenkov
JMH - Java Microbenchmark Harness
JMH (Java Microbenchmark Harness) is a toolkit that helps you implement Java microbenchmarks
correctly. JMH is developed by the same people who implement the Java virtual machine, so these guys know what
they are doing. This JMH tutorial will teachβ¦
correctly. JMH is developed by the same people who implement the Java virtual machine, so these guys know what
they are doing. This JMH tutorial will teachβ¦
I have made a video explaining my philsophy of Conscious Software Design in more detail. This is the design philosophy I have adopted over 25+ years of development.
Conscious software design is not focused on specific design techniques or doctrines, but rather on how to "think" about software design in general, meaning how to determine which design techqnue is appropriate in a given situation rather than just applying "clean code" or "hexagonal architecture" blindly.
https://www.youtube.com/watch?v=RrXZQLo1EOw&list=PLL8woMHwr36HWMaOTIiWNf_fYYkZCHPxo&index=4
Conscious software design is not focused on specific design techniques or doctrines, but rather on how to "think" about software design in general, meaning how to determine which design techqnue is appropriate in a given situation rather than just applying "clean code" or "hexagonal architecture" blindly.
https://www.youtube.com/watch?v=RrXZQLo1EOw&list=PLL8woMHwr36HWMaOTIiWNf_fYYkZCHPxo&index=4
YouTube
Conscious Software Design
Conscious Software Design is my personal software design philsophy which I have adopted over 25+ years of professional software development. Many developers with 10+ years of software development experience begin to develop differently - and in this videoβ¦
My Polymorph Data Language is finally "ready" enough for public scrutiny π
The work took a detour - so I ended up starting with 2 more parser friendly syntaxes - which are also relatively easy to parse in parallel (for more speed when needed). I have documented the first 2 syntaxes here:
https://jenkov.com/tutorials/polymorph-data/polymorph-data-language.html
I also have a third, more humanly readable / typeable syntax, but I am not sure it should be published. It's not as fast to parse, and hard (impossible?) to parse in parallel... why would we limit ourselves that much - just for a bit of extra readability? ... a bit fewer characters? Hmm... But maybe for small scripts it would be fine ( < 1 KB ) - as the performance difference might be insignificant in some such cases (small scripts parsed less often).
Polymorph Data Language (PDL) is an alternative to JSON, YAML, XML, CSV etc. which provides more features and is this more versatile than these other languages. Features, such as compact object representations, tabular data representations, object tree representations and cyclic object graph support.
PDL can also be converted to its binary counter-part Polymorph Data Encoding (PDE), which is even faster to process, and more compact on the wire / disk. PDE uses an encoding similar to MessagePack and CBOR, but with a few changes to support all the features I wanted (such as efficient tabular data, efficient object trees and cyclic object graphs).
I have spent a looooong time scrutinizing as many aspects of PDL and PDE as I could - to make sure it has good trade-offs in its design - suitable for as many use cases as I could think of.
Now I am ready for your scrutiny too - pointing out all the things I have missed π π
#Polymorph #PolymorphDataLanguage #PolymorphDataEncoding #PDL #PDE
P.S. I learned a lot about tokenizer speeds in the process too! ... I'll write more about that too, some day π
The work took a detour - so I ended up starting with 2 more parser friendly syntaxes - which are also relatively easy to parse in parallel (for more speed when needed). I have documented the first 2 syntaxes here:
https://jenkov.com/tutorials/polymorph-data/polymorph-data-language.html
I also have a third, more humanly readable / typeable syntax, but I am not sure it should be published. It's not as fast to parse, and hard (impossible?) to parse in parallel... why would we limit ourselves that much - just for a bit of extra readability? ... a bit fewer characters? Hmm... But maybe for small scripts it would be fine ( < 1 KB ) - as the performance difference might be insignificant in some such cases (small scripts parsed less often).
Polymorph Data Language (PDL) is an alternative to JSON, YAML, XML, CSV etc. which provides more features and is this more versatile than these other languages. Features, such as compact object representations, tabular data representations, object tree representations and cyclic object graph support.
PDL can also be converted to its binary counter-part Polymorph Data Encoding (PDE), which is even faster to process, and more compact on the wire / disk. PDE uses an encoding similar to MessagePack and CBOR, but with a few changes to support all the features I wanted (such as efficient tabular data, efficient object trees and cyclic object graphs).
I have spent a looooong time scrutinizing as many aspects of PDL and PDE as I could - to make sure it has good trade-offs in its design - suitable for as many use cases as I could think of.
Now I am ready for your scrutiny too - pointing out all the things I have missed π π
#Polymorph #PolymorphDataLanguage #PolymorphDataEncoding #PDL #PDE
P.S. I learned a lot about tokenizer speeds in the process too! ... I'll write more about that too, some day π
lnkd.in
LinkedIn
This link will take you to a page thatβs not on LinkedIn
I will slowly start writing about other programming languages than Java too. In the beginning, probably Python and JavaScript as I am already working with these languages too - and in the beginning mostly the basics - the core elements. Then it will evolve from there π
Today I have published my updated P2P Network Introduction video π
This video introduces multiple different P2P network topologies, where my first video only introduced the ring topology used by Chord, Kademlia, Pastry and Tapestry. The new video also introduces my own P2P network topology which I call the Polymorph Polyring topology π Here is the video:
https://www.youtube.com/watch?v=Vw9ynzuGNSw&list=PLL8woMHwr36F-1h7BE92ynHHOE3zebGpA&index=2
This video introduces multiple different P2P network topologies, where my first video only introduced the ring topology used by Chord, Kademlia, Pastry and Tapestry. The new video also introduces my own P2P network topology which I call the Polymorph Polyring topology π Here is the video:
https://www.youtube.com/watch?v=Vw9ynzuGNSw&list=PLL8woMHwr36F-1h7BE92ynHHOE3zebGpA&index=2
YouTube
P2P Networks Introduction
Peer-to-peer networks, AKA P2P networks, are networks of computer communicating without a central server. Peers are different from clients and servers in that clients and servers have different roles, whereas peers typically all have the same roles - eachβ¦
I've published a short tutorial on the core Python data types π
https://jenkov.com/tutorials/python/python-data-types.html
As I said, I would begin writing about other programming languages than Java. Python is the first one so far, apart from a bit of JavaScript related tutorials (such as jQuery) π
https://jenkov.com/tutorials/python/python-data-types.html
As I said, I would begin writing about other programming languages than Java. Python is the first one so far, apart from a bit of JavaScript related tutorials (such as jQuery) π
Jenkov
Python Data Types
Python comes with a set of built-in data types. These data types include boolean, numeric and string data types, among others. This Python data type tutorial explores the built-in core Python data types.
I have just published a video about the Java ForkJoinPool which makes it easy for you to break down a task into smaller subtasks recursively, so they can be executed in parallel - by the ForkJoinPool.
Additionally, the results (if any) of all the subtasks can be joined recursively into a single result again.
https://m.youtube.com/watch?v=aiwuJQt7YJU&list=PLL8woMHwr36EDxjUoCzboZjedsnhLP1j4&index=26&pp=gAQBiAQB
The Java ForkJoinPool was one of the most requested topics, so I finally gave in and made a video about it π
Additionally, the results (if any) of all the subtasks can be joined recursively into a single result again.
https://m.youtube.com/watch?v=aiwuJQt7YJU&list=PLL8woMHwr36EDxjUoCzboZjedsnhLP1j4&index=26&pp=gAQBiAQB
The Java ForkJoinPool was one of the most requested topics, so I finally gave in and made a video about it π
YouTube
Java ForkJoinPool
The Java ForkJoinPool helps you break down large tasks into smaller subtasks which can be executed in parallel using all, or some, of the CPU cores available in your computer. The Java ForkJoinPool thus helps you implement a fork and join type of work breakβ¦
I have published a Python while loop tutorial in my growing Python tutorial. While loops are useful for repeating a block of instructions until a certain condition becomes false.
https://jenkov.com/tutorials/python/python-while.html
Hope you will find it useful! π
https://jenkov.com/tutorials/python/python-while.html
Hope you will find it useful! π
Jenkov
Python while
The Python while loop is used to loop as long as certain condition is true.
I have updated my P2P networks introduction to give a better overview of the core concepts and ideas:
https://jenkov.com/tutorials/p2p/index.html
https://jenkov.com/tutorials/p2p/index.html
Jenkov
Peer-to-Peer (P2P) Networks
Peer-to-peer (P2P) networks are decentralized systems without a central server to coordinate between the peers in the system. This peer-to-peer tutorial explains the theory behind P2P algorithms like Chord, Kademlia, Pastry etc.
Over the last few weeks I have been working on a search function for my website jenkov.com ... now it is finally online :-) For now it is hidden in the top menu, but I will probably move it out to make it more visible soon (-ish).
It is still pretty basic - but better than no search function. You can at least find most of the bigger topics now. I have several ideas for improving the search in the future.
I coded it myself, by the way, from scratch. No third party search tools used. It wasn't that difficult, once I had the core idea for how it should work. But let's see how easy it will be to improve it... finding the right balance between the weights of different words in a query seems like something one could spend a lot of time on ... π€ π
It is still pretty basic - but better than no search function. You can at least find most of the bigger topics now. I have several ideas for improving the search in the future.
I coded it myself, by the way, from scratch. No third party search tools used. It wasn't that difficult, once I had the core idea for how it should work. But let's see how easy it will be to improve it... finding the right balance between the weights of different words in a query seems like something one could spend a lot of time on ... π€ π