Modern IDEs provide developers with sophisticated features like code completion, refactoring, navigating to a symbol's definition, syntax highlighting, and error and warning markers.
an IDE needs a sophisticated understanding of the programming language that the program's source is written in.
Conventional compilers or interpreters for a specific programming language are typically unable to provide these language services, because they are written with the goal of either transforming the source code into object code or immediately executing the code.
Prior to the design and implementation of the Language Server Protocol for the development of Visual Studio Code, most language services were generally tied to a given IDE or other editor.
The Language Server Protocol allows for decoupling language services from the editor so that the services may be contained within a general purpose language server.
LSP is not restricted to programming languages. It can be used for any kind of text-based language, like specifications[7] or domain-specific languages (DSL).
When a user edits one or more source code files using a language server protocol-enabled tool, the tool acts as a client that consumes the language services provided by a language server.
The protocol does not make any provisions about how requests, responses and notifications are transferred between client and server.
"Over the last decade we've developed and refined a number of techniques that allow a database design to evolve as an application develops. This is a very important capability for agile methodologies. The techniques rely on applying continuous integration and automated refactoring to database development, together with a close collaboration between DBAs and application developers. The techniques work in both pre-production and released systems, in green field projects as well as legacy systems."
Before accessing variables within objects and collections make sure they are there! PLEASE!
If that variable is a constant or won't be changed then use the Const keyword in applicable languages and the CAPITALISATION convention to let users aware of your decisions about them.
The name of a method is more important than we give it credit for, when a method changes so should its name.
Make sure you are returning the right thing, trying to make it as generic as possible.
Void should do something, not change something!
Private vs Public, this is a big topic
keeping an eye of the access level of a method can stop issues further down the line
Gherkin is a Business Readable, Domain Specific Language created especially for behavior descriptions.
specify the 3 main points of a test, including what you expect to happen using the following keywords GIVEN, WHEN / AND , THEN.
look at how the code is structured, make sure methods aren't too long, don't have too many branches, and that for and if statements could be simplified.
Use your initiative and discuss if a rewrite would benefit maintainability for the future.
it's unnecessary to leave commented code when working in and around areas with them.
Microservices are a useful architecture, but even their advocates
say that using them incurs a significant
MicroservicePremium, which means they are only useful
with more complex systems.
you should build a new
application as a monolith initially, even if you think it's likely
that it will benefit from a microservices architecture later on.
Any refactoring of functionality
between services is much harder than it is in a monolith.
By building a
monolith first, you can figure out what the right boundaries are,
before a microservices design brushes a layer of treacle over them.
The logical way is to design a monolith carefully,
paying attention to modularity within the software, both at the API
boundaries and how the data is stored.
start with a monolith and gradually
peel off microservices at the edges
Don't be afraid of building a
monolith that you will discard, particularly if a monolith can get
you to market quickly