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 ... π€ π
My book about P2P Networks is in progress, and is available on LeanPub. It has actually been available a while now - I just forgot to announce it π Payment is optional π
https://leanpub.com/p2p-networks
I started thinking about writing a book about P2P Networks already 1.5 years ago, and I think I have mentioned it a few times inhere too. Now it is finally becoming "reality" π π
The book is still under 50% finished, but there is enough material for a reader to be able to start learning the basics about the different P2P network topologies that exists. I will be adding a good deal more to the book in the future!
I have books about other topics planned too, by the way, but I will talk about those once they become "reality" π
https://leanpub.com/p2p-networks
I started thinking about writing a book about P2P Networks already 1.5 years ago, and I think I have mentioned it a few times inhere too. Now it is finally becoming "reality" π π
The book is still under 50% finished, but there is enough material for a reader to be able to start learning the basics about the different P2P network topologies that exists. I will be adding a good deal more to the book in the future!
I have books about other topics planned too, by the way, but I will talk about those once they become "reality" π
Leanpub
P2P Networks
P2P networks can scale to thousands, millions or even billions of individual peers collaborating without a central, coordinating entity. This book explores how!
I have updated my Java tutorial / introduction to list the major new features in Java 21 and 22. It now contains a listing of the major features in each Java realease going back to Java 7 π
https://jenkov.com/tutorials/java/index.html
I have not yet written about all the new features. I probably will at some point when / if I get the time for it π ... but it's useful to have the list at least!
https://jenkov.com/tutorials/java/index.html
I have not yet written about all the new features. I probably will at some point when / if I get the time for it π ... but it's useful to have the list at least!
Jenkov
Java Tutorial
This Java tutorial teaches the core features of the Java language. As the Java language evolves, this tutorial is updated.
Here is the first version of my Java HttpClient tutorial π
There are still things to add, but the basics are there π
https://jenkov.com/tutorials/java-networking/httpclient.html
There are still things to add, but the basics are there π
https://jenkov.com/tutorials/java-networking/httpclient.html
Jenkov
Java HttpClient
The Java HttpClient provides an easy-to-use API for making HTTP 1.1 + HTTP 2.0 requests. The Java HttpClient provides both a synchronous and asynchronous interface. HttpClient also supports web sockets. The HttpClient class was added to Java in Java 11.
I have just published a video about Java Generics π
A frequently requested topic! π
https://www.youtube.com/watch?v=CKWw7J5MsyY&list=PLL8woMHwr36GYaIsv6STX864waOm61gMt&index=11
A frequently requested topic! π
https://www.youtube.com/watch?v=CKWw7J5MsyY&list=PLL8woMHwr36GYaIsv6STX864waOm61gMt&index=11
YouTube
Java Generics
Java Generics enable us to gain type safety in situations where classes and methods that are designed to be able to work with any type would otherwise be designed to work with Object instances. For instance, without Java Generics the Java List, Java Set,β¦
I have just published a short tutorial on Python classes.
https://jenkov.com/tutorials/python/python-classes.html
https://jenkov.com/tutorials/python/python-classes.html
Jenkov
Python Classes
A Python function is a block of instructions which can be called repeatedly - and thus reused. You can pass parameters to the function which can affect the behaviour of the function.
Released a short video about the difference between designing for scalability or performance. In other words, should you solve all capacity problems by throwing hardware at the problem? Or should you try to utilize the hardware you already have, better?
https://www.youtube.com/watch?v=IDAf1D0HIOg
#SoftwareDesign
https://www.youtube.com/watch?v=IDAf1D0HIOg
#SoftwareDesign
YouTube
Designing for Scalability vs Performance
When the load on a system gets close to the capacity of that system - you will typically have to address that situation by increasing the capacity of that system.
You can increase the capacity of a system in two ways: Via scaling - or via performance optimization.β¦
You can increase the capacity of a system in two ways: Via scaling - or via performance optimization.β¦
I have finally "figured out" the core principles of what I call Compositional Software Design - which I have been talking about here from time to time on social media. I have published a tutorial explaining these core principles (link below).
There is still more to say about Compositional Software Design than what is currently in this tutorial - but there is enough to understand the central ideas. More will be added in the future, but will probably mostly be more nuances and details around the core principles.
https://jenkov.com/tutorials/software-design/compositional-software-design.html
There is still more to say about Compositional Software Design than what is currently in this tutorial - but there is enough to understand the central ideas. More will be added in the future, but will probably mostly be more nuances and details around the core principles.
https://jenkov.com/tutorials/software-design/compositional-software-design.html
I have updated my book about P2P Networks with a chapter about the Kademlia P2P topology, and a few more details about the Chord P2P topology.
The book is still less than 50% finished. I plan to cover more P2P topologies, as well as distributed hashtables and a few other topics. I also plan to add more details about each of the covered P2P topologies - once the basic theories are covered.
https://leanpub.com/p2p-networks
The book is still less than 50% finished. I plan to cover more P2P topologies, as well as distributed hashtables and a few other topics. I also plan to add more details about each of the covered P2P topologies - once the basic theories are covered.
https://leanpub.com/p2p-networks
Leanpub
P2P Networks
P2P networks can scale to thousands, millions or even billions of individual peers collaborating without a central, coordinating entity. This book explores how!
My Polymorph Data Language and Polymorph Data Encoding are getting close to "stable". Therefore I have decided to move their specifications to a GitHub repository - in which I can post descriptions and examples - both in text and via example files etc.
It's not all complete yet. I will keep adding details over the coming weeks.
The repository is located here:
https://github.com/jjenkov/pde-pdl-specification
It's not all complete yet. I will keep adding details over the coming weeks.
The repository is located here:
https://github.com/jjenkov/pde-pdl-specification
GitHub
GitHub - jjenkov/pde-pdl-specification
Contribute to jjenkov/pde-pdl-specification development by creating an account on GitHub.
Help your co-developers grow - by meeting them where they are!
That is the theme of this little video I made, by request from Majid Mostafavi from the Iranian JUG (topic was developer soft skills).
Happy International Developers Day π
https://www.youtube.com/watch?v=EpEbT5bYNb4
That is the theme of this little video I made, by request from Majid Mostafavi from the Iranian JUG (topic was developer soft skills).
Happy International Developers Day π
https://www.youtube.com/watch?v=EpEbT5bYNb4
YouTube
How to Help Your Co-Developers Grow
Help your co-developers grow - by meeting them where they are (knowledge-wise) and help them grow from there - instead of leaving them to figure out what to learn and where, on their own.
It sounds like simple and obvious advice, but I have experienced thisβ¦
It sounds like simple and obvious advice, but I have experienced thisβ¦
I have updated my Java tutorial introduction to list what is new in Java 23. The list of new features now lists all the major features in each release, back to Java 7.
https://jenkov.com/tutorials/java/index.html
https://jenkov.com/tutorials/java/index.html
Jenkov
Java Tutorial
This Java tutorial teaches the core features of the Java language. As the Java language evolves, this tutorial is updated.
I have updated my Java ConcurrentMap + ConcurrentHashMap tutorial - and made a video version of that tutorial. Here are the links:
https://jenkov.com/tutorials/java-util-concurrent/concurrentmap.html
https://www.youtube.com/watch?v=OGXAs9fZYTc&list=PLL8woMHwr36EDxjUoCzboZjedsnhLP1j4&index=28
https://jenkov.com/tutorials/java-util-concurrent/concurrentmap.html
https://www.youtube.com/watch?v=OGXAs9fZYTc&list=PLL8woMHwr36EDxjUoCzboZjedsnhLP1j4&index=28
Jenkov
Java ConcurrentMap
This tutorial explains how the ConcurrentMap in Java works.