Progettazione Software

There are 235 entries for the tag Progettazione Software

Current state of Agile values and practices evolution

Here follow some contributions to the evolution and understanding of Agile values and practices from Kent Beck. Evolution of Agile Values Team vision and discipline over individuals and interactions over processes and tools Validated learning over working software over comprehensive documentation Customer discovery over customer collaboration over contract negotiation Initiating change over responding to change over following a plan You can read more about it in this Forbes article: Innovation: Applying "Inspect & Adapt" To The Agile Manifesto And you can watch this presentation: Startup Lessons Learned The 5th Agile Value ...

Emergent Architecture, what really is?

What is Emergent Architecture then ? I start writing down a description, you are welcome to add yours. I begin with a story that in my opinion describe the dynamic of an Emergent Architecture In Oregon in 1975 when faced with the decision of where to build footpaths between newly erected student housing, the architect let the authorities first plant grass between the buildings. Students were left free to walk on the grass. Later, the footpaths were placed on the paths the students feet had traced on the lawn. ...

Top reasons for projects success

A big value of XP, Scrum, Lean, Kanban and Agile in general is the decreased time to market and increased success rate. What are the top perceived reasons for projects success then? The book from Crisp 'Prioritera Fokusera Leverera' references two sources on the matter. The Standish Group CHAOS report 2006: The Harvard Business School article from professor Alan MacCormack 2001 that lists: An early release of the evolving product design to customers Daily incorporation of new software code and rapid feedback on design changes A team with broad-based experience of shipping multiple...

Can we have constructive disagreements? Maybe!

 We discuss on-line many hours in blogs, forums and twitter. To what degree do we discover something professionally useful and valuable and to what degree are we losing our precious time?   Information sharing proved to be extremely useful and valuable. Instead disagreement and diversity of opinions, that have a great potential for learning new things, very seldom lead to profitable discussions. At least in my personal experience.       Do we know what we are disagreeing about? Paul Graham write:  More often than not, two people arguing passionately about something are actually arguing about 2 different things. Sometimes they...

Are we talking from different parallel alternative universes? Often!

  We spend many hours in blogs, forums and twitter. How much we really understand each other, behind empathy, sympathy or  antipathy? The surprising hypothesis is that, yes, when we talk about computer programming and software development: we are often talking from different parallel alternative universes and we misunderstand each other because of the topic itself that is complex and slippery (what is called a wicked problem) and because we highly underestimate this complexity.   Really ? Let's start mentioning well known and documented misunderstandings. Martin Fowler about Model View Controller or MVC architectural pattern says "one of the most quoted and most misquoted patterns around". Jeffrey...

Discussing certifications a little deeper and without bias

Here below follow some common criticisms about certifications that are a little superficial and inaccurate. I'll try to show what I think are the mistakes in those sentences using arguments, facts and evidences. Don't misunderstand me, with this I'm not implying that the opposite sentences are true neither. The goal is to move the conversation a little deeper. Whatever is your opinion, belief, intuition and feeling about Agile Certifications, good arguments, facts and evidences can help everyone to discuss effectively and have a better understanding of the topic. All the certifications are broken Fact: Would you get on a bus where the...

Cos'é per te XP ?

Questa é una delle domande rivolte da Andrea Gervasini per la sua tesi sull'Extreme Programming come conclusione della sua laurea presso l'Università dell'Insubria di Varese. Trascrivo qui la risponsta che mi sono dato. Commenti e visioni alternative sono ben accolte :) Cos'é per te XP, la personale visione di cos'è xp tralasciando i libri ? Riconoscere in ogni progetto e sviluppo software quello che sappiamo e anche quello che non conosciamo, non possiamo prevedere e non possiamo controllare. e adattare il nostro modo di lavorare di conseguenza. reagendo, adattandoci, esplorando, trovando l'equilibrio tra cio che possiamo anticipare e cio...

Greed dice game exercise from Ruby Koans

One of the Learn Ruby Koans exercise is about implementing a method that calculate the score of the Greed dice game. A friend reviewed my solution pointing out some conditional expressions that could be avoided (from 3 they are zero now), some state that could be removed (greed_roll_scores is calculated and never changed now), and in the way of the refactoring some duplication (2 similar rules of the games now are both applied with a unique common logic) become evident and I removed it. Here is the resulting score method, I left also the comments with the Greed game description and the...

Ruby custom and automatic attribute accessors

The automatic one: class Foo   attr_accessor :name     def initialize     @name = "no name"   end end The custom one: class Foo   def initialize     @name = "no name"   end   def name     @name   end     def name= value     @name = value   end end Tags :  Team Work | Tools | Progettazione Software | Traduci al ITALIANO >>>

Ruby lambdas and each and enumerators

When I define and assign a lambda like this my_lambda = lambda{ |key, value| puts key, value } can I call an array or hash each method that return an enumerator and pass my lambda as body of the each, { :one=>1, :two=> 2 }.each my_lambda like this ? Honestly I felt the lack of an interactive debugger and of a tool/reflector to dig into the each method implementation here. A more experienced Ruby programmer could tell me where to find them probably. That call gave me an error, wrong number of parameters (1 for 0) in the each call. With some memory of C++ syntax...

Ruby Koans and Ruby idioms

At the http://www.ruby-lang.org/ have found funny ways to start learning Ruby with examples and small code exercises, a very practical approach. Ruby in Twenty Minutes has been an enjoyable start, also Hackety Hack! that remember me ProfStef from Smalltalk land. Then I was ready to start with The Ruby Koans, a way to look a little deeper in to the language driven by unit tests, great and funny !!! After that I investigated more Ruby idioms, http://cbcg.net/talks/rubyidioms/ & http://stackoverflow.com/questions/613985/common-ruby-idioms, some of them related to more advanced or esoteric language features, that you would live perfectly without the 99.99% of the times and that...

Ruby closure scope and other ideas

In Ruby you can have closures with a Block, a Proc or a Lambda. They are very similar and have subtle differences. I've found this article very clear to me: Understanding Ruby Blocks, Procs and Lambdas In short, for what I understood, Blocks cannot have parameters and ( http://pastie.org/3107157 ) cannot be stored while Procs can like Lambdas. Blocks cannot execute a return statement, Procs can and the calling method will return, Lambdas can too and simply return the value to the calling method. Here are the scope examples with Blocks: http://www.pastie.org/3099991 with Procs: http://www.pastie.org/3099995 ...

Øredev 2011 what I've learned

One of the bes computer programming technology conference I've been with lot of international speaker and where you can get a sense of the Scandinavian programmers talent, initiative and innovative spirit. What I've learned and I will try to apply ? Before my memories vanish, let's take a note. Only your mom wants to use your website Keynote from one of the founders of Reedit A success story about the possibilities for an entrepreneur in Internet, limited only by the fantasy The users driven product development (1 year release plans are for dinosaurs doomed...

XP Days Benelux 2011, what lessons I've learned and I'll reuse

One of the best Agile Conference of the year as usual, XP Days Benelux. What I've learned and I will try to apply ? I should answer this question and log the answer for every conference I attend. Overall I met two ideas cross different sessions: focus on understanding the problem before rushing to search for a solution don't relay only to intuition to find a solution. look at data and do experiments A War Story of the Rise and Fall of an "Agile" Company Focus on understanding the problem A...

What’s New in JavaScript Programming (ECMAScript 5)

The last update (December 2009) of the JavaScript dynamic typed language (ECMAScript 5)  evolve the language one step in the direction of the good parts. The goals of this language update: Don’t break the web Improve the language for the users of the language Third party security (mashups) No new syntax And a non-goal was “protect stupid people from themselves” Here a complete list of the improvements: ECMAScript 5: What’s New in JavaScript Programming Douglas Crockford explains the improvements in this presentation: ECMAScript 5: The...

Javascrip: objects creation and inheritance

Many many different ways for doing similar things. Let's see if I remember how ... 1) Create object with dynamically added members, and prototypal inheritance from that object: - http://pastie.org/2661313 2) Create object with function constructor, and parasitic inheritance from that object: - http://pastie.org/2661334 3) Create object with object literals, and prototypal inheritance from that object: - http://pastie.org/2661348 4) Create object with prototype, and pseudoclassical inheritance from that object: - http://pastie.org/2681962 5) Create object with Powerconstructor pattern (a.k.a. module pattern), and parasitic inheritance from that object: - http://pastie.org/2661396 Personally I find the syntax of 1), 3) and 4) unnecessarily complicated and tricky. I like the syntax of 2) and...

Learning Smalltalk - Part 5

Inspiring ideas from the Smalltalk community Smalltalk Best Practice Patterns, Kent Beck - List from Linda Rising  - Book draft Design Principles Behind Smalltalk, Daniel H. H. Ingalls, 1981 Smalltalk: Overview and Implementation Issues, 2002-2003 Dan Ingalls on the History of Smalltalk ...

Learning Smalltalk - Part 4

Smart ideas from Smalltalk, forgotten and waiting to be re-invented The focus on message passing in OO programming.  Watch InfoQ interview with Ralph Johnson and Joe Armstrong on the State of OOP A language defined only with very simple rules, with the underlying concepts that are *simple* and *uniformly* applied.  The underling principle is that: If a system is to serve the creative spirit, it must be entirely comprehensible to a single individual. ...

Learning Smalltalk - Part 3

Innovative ideas originated from Smalltak It is surprising how many innovations introduced recently originates from Smalltalk. This is an opportunity to go back to the origins of those ideas and better and deeper understand them. Some examples? Smalltalk implemented a platform-independent Virtual Machine and application program interface based on industry standards before Java (and so before .NET ). Smalltalk was one of the first systems to pioneer the WIMP (Windows, Icons, Menus and Pointers) interface (it was the one Steve Jobs...

Learning Smalltalk - Part 2

Some alive and kicking Smalltalk free implementations Smalltalk/X: http://www.exept.de/en/products/smalltalk-x/stx-overview Pharo: http://www.pharo-project.org/ Squeak: http://squeak.org/ Now to play with the language, here we go : I can Read C++ and Java But I can't Read Smalltalk Smalltalk basics Introduction to Smalltalk ...

Learning Smalltalk - Part 1

Learning Smalltalk why ? When you are ready to listen to the answer, the right question will naturally come Here a list of possible good reasons:  Why Smalltalk? My why to Smalltalk: Reading Smalltalk code will give me access to a library of books and papers and articles from a smart group of people with bright insights and a deep understanding of computer programming: a lot of forgotten gold lessons that can still be a competitive advantage. And also computer programming is old enough...

The Laws of Software Process

   1st Law of Software Process: Process only allows us to do things we already know how to do. 2nd Law of Software Process: We can only define software processes at two levels: too vague and too confining. Source: The Laws of Software Process: http://www.corvusintl.com/CACM003-LoSWP.htm A methodology is the conventions the team agrees to follow. Methodology Success = Project delivered + Staff would do it again Source: http://alistair.cockburn.us/Everyone+should+be+a+methodologist A software development process is a framework imposed on the development of a software product. Source: http://en.wikipedia.org/wiki/Software_development_process   Tags :  Team Work | Agile | Pratiche | Leadership | Progettazione Software | Traduci al ITALIANO...

Consistency & Change

It is possible to pursue Consistency through  simplification of unnecessary complexity and emergence of useful order and at the same time pursue Change subverting established order even exploiting doubt and paradoxes and unintended details to create high value Consistency can enable change as well as change can increase consistency. When you explore and discovery what to keep and what to change and how. Instead bad Consistency  preserve the status quo obstructing both change, emergence of useful order and simplifications while bad Change add complexity and variations and disrupt existing order without creating high value This is the easy part. The difficult one is the willingness to change :) ...

Small steps Vs ongoing big changes

Scrum says: time-box & prioritize items to maximize value. In the release planning meeting, in the sprint planning meeting, at the stand-up meeting, every day during the sprint Startup and Open source lessons and Agile Software Development suggest: release early, release often, and listen to your customers eXtreme Programming principles: Baby Steps (to reduce risks and get early frequent feedback)  and Improvements (don't wait for perfection,don't leave behind you a mess) Complexity Science suggests: strive for safe-fail experiments whose success can be highly valuable and whose failure can be very informative Lean software development principles: Amplify Learning (with rapid try-it, test-it, fix-it feedback ...

CAP theorem and NoSql ideas to make your SQL db scale

Here the full article: Scalable SQL Here follow some key points, a sort incomplete abstract ... so read also the original Why are many of the leading social networking sites and large banking applications still implemented using traditional database instead of using the new NoSQL systems? ... Application architecture cannot use "traditional" database ...

The redpill and the bluepill of sw development

The   bluepill   of software development: defined process outdated Gant charts procrastination of reality check The   redpill   of software development: empirical process inspect-adapt feedback/control loops continuous reality-checks Choose: http://en.wikipedia.org/wiki/Bluepill or http://en.wikipedia.org/wiki/Redpill Tags :  Team Work | Agile | Lean Agile | Leadership | Team | Progettazione Software | Traduci al ITALIANO >>>

Traditional/Modern Management

Some thoughts about differences I noticed between traditional management and modern software project management. In traditional management a manager can define and be responsible for the deadline and the scope of a project (i.e. fixed scope, fixed price, fixed deadline contracts). Often with the assumptions that : the customer knows all what he wants (before the project start) the developers know how to build it (before the requirements are known and understood and the used technology is proven and well known) nothing will change along the way, unforseen events will not...

Gestione Agile del Codice sorgente: branch o no ?

Copia-incollo da un thread di XPUG-IT contributi da alcuni post tra cui uno di Piergiuliano Bossi. Sul tema viene in aiuto il principio XP di semplicitá (quella che si raggiunge attraverso skill e padronanza, non quella che deriva dal banalizzare) il principio XP di flusso (fare una cosa in modo continuo e incrementale spinge a eliminare le inefficenze e lo spreco e risulta piu effecace, pensa ad esempio al refactoring continuo del TDD comparato a i grandi refactoring) il principio Agile: Gli individui e le interazioni prima...

An interesting Scrum Guide

An interesting Scrum Guide: Professional Scrum Master, Ken Schwaber Tags :  Team Work | Agile | Progettazione Software | Traduci al ITALIANO >>>

Valid alternatives to the strongly-typed Static resource class 2/2

Here follow 3 alternatives to the static strong typed class automatically generated by Visual Studio (2005, 2008, 2010) to get access to the resources (in .resx files) . All are great examples of how to exploit the technology to improve the design of the application instead of writing fragile rigid code highly coupled with a specific technology solution. One alternative is to create an instance class that wrap the static class, it will contain a property get for every resource expesed by the static class. Basically instance class methods are a 1:1 mapping of the static class ones. The instance class...

Valid alternatives to the strongly-typed Static resource class

Starting from  Visual Studio 2005, it is possible to automatically generate code to get access to resources (in .resx files) by a static strong typed class. As soon as you try to write a unit test of the class that access the resources via the static class or  you change the way resources are stored and retrieved (i.e. you move them to the db or you switch to a 3rd party library for the localization) you start to feel all the pain due to the static classes: indeed the code that use that static class violate the OCP and the DIP principles...

On software systems evolution

To the degree that a software system is large and distributed enough that there is no effective single point of control, we must expect evolutionary forces. ... There is much to be gained by recognizing and accepting that computational systems resemble naturally evolving systems much more closely than they resemble engineered artifacts such as bridges or buildings. Specifically, the strategies that we adopt to understand, control, interact with, and influence the design of computational systems will be different once we understand them as ongoing evolutionary processes. -- D. H. Ackley et al. 2002 Here an example on how TDD practices can be evolutionary forces that...

Pratichi TDD? Una ricerca/esperimento

      Ultimamente ci si interroga spesso su qual'é l'influsso del TDD sul disegno del codice e quali pratiche sono prescritte dal TDD. L'anno scorso ho documentato l'esperienza di un team e ora ho preparato un questionario e del codice, un esperimento pratico per indagare le ipotesi. Sia chi é esperto nel TDD e chi ha iniziato da poco puo trovare l'esperimento interessante per riflettere sul proprio stile di TDD e confrontarlo con un altro grazie ad esempi minimi e significativi. O semplicemente per partecipare alla ricerca. Questionario e codice sono in beta, qualsiasi feedbak, suggerimenti e commenti per...

DI and IoC: pattern and frameworks, strengths and weaknesses

IoC or Inversion of Control. A well known example of the IoC pattern is the Windows 3.0 programming that inverted the program's control flow compared to MS-DOS. Windows manage the I/O devices and calls program's event handler when the user performs some input.  While in MS-DOS the program in the main loop had to pools the I/O devices to know the position of the mouse and the status of the keyboard. IoC pattern means event-driven instead of pooling the sources. The reference to sources of the events are passed to the program/object that will trigger its behavior when receives an event notification....

TDD with mocks and spies

    Some testing tools like Moq (with MockBehavior.Strict), NMock, JMock and Rhino Mocks fluent and record/playback syntax use mocks.     Other testing tools like Moq (with Verify), Mockito and Rhino Mocks AAA syntax use spies. Here I will note down the characteristics of both. Let start with the differences. Spies allow to assert the expectations after the invocation of the method being tested, while mocks (we are talking abou strict mocks) require to set expectations before the target method invocation. Because of it someone finds the test written with spies more readable, while someone else finds easier to write...

Scrum: Roles & Responsibilities II

Product Owner Working on a shared vision Gathering requirements Managing and prioritizing the product backlog Accepting the software at the end of each iteration Managing the release plan The profitability of the project (ROI) Metaphor: The Product Owner is a CEO ScrumMaster Empowering and shepherding the team Removing impediments Keeping the process moving Socializing Scrum to the greater organization ...

Notes on Functional Programming paradigm 3: pros & cons

Pros: in functional style the sequence of calls and operations seldom matter while in procedural style it does and this add complexity Pros: in functional style it is easier to change a program because assumptions and statements about objects are absolute, they never change over time. While in procedural style state change and a huge effort is required to avoid unintended consequences. Indeed a major effort in OOP with encapsulation and information hiding is about partitioning...

Notes on Functional Programming paradigm 2: data and logic variation frequency

When a computer program solve a problem with data that never change and so the state but instead new values of data are created every time (i.e. like for primitive types in Java and C#)  as in mathematics operations, then it is said to have a functional style, it follow the functional paradigm. Some problem (solution) can be best expressed by a program with a functional style, some other problem can be best expressed by a procedural style (where state change over time) and for some other problem it is just a matter of personal preferences. Human brain has...

Notes on Functional Programming paradigm 1: data and logic

Computer programs can be seen as data (structures, state) and logic (algorithms, behavior). Data changes when data values (state) changes over time, logic changes mainly when different inputs lead to different computations. Just to be clear, conditionals are the most common ways to express changes in logic, and there are a whole set of ways of doing so that are equivalent to conditionals. Programming effectively is about grouping together data and related logic and express properly the variations of the data and the variations of the logic. The same problem can be solved by different programs,...

Non Relational Db, la teoria collegata

Trovo i concetti alla base di molte implementazioni dei db non relazionali interessanti in generale e con applicazioni anche in problemi diversi. Me li annoto qui. CAP Theorem - http://devblog.streamy.com/2009/08/24/cap-theorem/ - http://en.wikipedia.org/wiki/CAP_theorem Transazioni Eventually Consistent - http://www.allthingsdistributed.com/2008/12/eventually_consistent.html MapReduce - Tutorial from Google - http://en.wikipedia.org/wiki/MapReduce Crash only software ...

UX Prototyping e Scrum

Nicolò Carandini ha proposto la questione di come l'attività di prototyping si rapporta con lo sviluppo software con Scrum. Giá, come ?     Cose é la HCI Comincio la ricerca da alcuni fatti raccolti e sintetizzati sulla User Experience prototyping. Lo UX prototyping é uno strumento della Human-Computer Interaction (HCI). La HCI é la disciplina che si occupa del design, della valutazione e della implementazione di sistemi informatici interattivi. É utile ad esempio per le applicazioni web, di realtá virtuale, nella visualizzazione dell'informazione, nell'ubiquitous computing. Ha tre pilastri: la tecnologia informatica (es. software, device hardware, la grafica e gli stili di interazione), le...

The secret training of Ferrari engineers for the Pit Stops

Just posted about Pair Programming experience in Formula One and the relation with Pit Stop. And today, just one day later, here is revealed the video of Ferrari engineers training for the Pit Stop: Tags :  Team Work | Agile | Pratiche | Progettazione Software | Traduci al ITALIANO >>>

Pair Programming and Formula One

When I was working and developing software in F1, people from other departments of the Racing Team were surprised to see two software engineers working and coding together at the same PC. The CTO used to mention the example of the Pit Stop where many engineers works together at the same car to refuel, switch tires, fix settings as fast and as perfectly as possible. Another example mentioned was the operating room where many surgeons work together to avoid mistakes and keep the surgery short. Not to mention that a real surgical team visited the Racing Team to...

Clean Code III Functions

One of the training on coding that I usually have with new teams is about proper naming of methods and arguments, and writing short methods. This article explain quite well all these things and add more insights to move to the next level: - choose names of Functions/Methods that are the verbs - choose names of  classes are the nouns of the DSL language that is used to build your system. The art of programming is, and has always been, the art of language design. Read these slides by Robert C. Martin: http://dl.dropbox.com/u/4730299/Clean%20Code%20Functions%20%28Java%29.pdf Tags :  Team Work | Agile | Pratiche | Semplicità | ...

Confessions of A New Agile Developer

I have worked in Waterfall model for most of my career. Some time back I joined Xebia and started working in the Agile style. Specifically, we have been following Scrum and XP methodologies with TDD as an emphasized practice. The transition from Waterfall to Agile is like... Interesting article, read the full story: http://www.infoq.com/articles/agile-confessions-sharma Tags :  Team Work | Agile | Pratiche | Progettazione Software | Traduci al ITALIANO >>>

Ports and Adapters architectural pattern

Create your application to work without either a UI or a database so you can run automated regression-tests against the application, work when the database becomes unavailable, and link applications together without any user involvement. Known also as: Hexagonal Architecture Read the full description here: http://alistair.cockburn.us/Hexagonal+architecture I know that my Italian friends Matteo Vaccari e Antonio Carpentieri have presented sessions about this topic at the London XP Days and in other agile events, so they can be trustworthy source when you want to ask questions about this topic. Tags :  Agile | Progettazione Software | Traduci...

Simplify packaging to speed up software developments

Once the team wrote the source code of an application, why should split that app into many modules (assembly, jar, dll, exe, binaries in general) ? Sometime there are no choices: i.e. when different part of the applications are developed with different technologies that require different compilers or even different operative systems. Some other time when a group of classes are used by 2 or more applications, instead of duplicating the classes they must go in a module and be reused. Here is when the REP come in...

Prova sul campo di NDepend v3 (2/2)

Ho proseguito la prova sul campo la nuova versione di NDepend v3  con le metriche del codice, con CQL e il suo editor. Con la SuperSolution, cioé la soluzione che include centinaia di migliaia di righe di codice e tutti i progetti della azienda per cui lavoro. Metriche:  Pratica e concreta la possibilitá di avere facilmente a disposizione lo stato della coverage dei test e la complessitá ciclomatica del ccodice: due indicatori importanti dello stato generale di salute della code-base. Molto interessante...

Versioning (6, end of this series)

So far we have discussed what team can do to extremely simplify versioning for the modules (assembly, jar, dll, exe, binaries in general). What about executables and web-applications, desktop applications, services and web-services? Verioning and tracking of breaking changhes are useful for changes that affect the production environment, let's make some examples: When an application requires an upgrade to the db schema to work properly, the application and the db must be versioned properly ! When there is an upgrade to a server application that...

Tell Don't Ask, unit tests and mutable state

If you follow the "Tell, Don't Ask" style, objects have very little visible state to assert about. ... When writing a program, I care only about what that program does, not the internal state that the program uses to control what it does. The only visible behaviour that a program has is its interactions with external entities ... Mutable state makes a program harder to understand and maintain ... "Doing encapsulation right is a commitment not just to abstraction of state, but to eliminate state oriented metaphors from programming." — Alan Kay Read the full post: http://nat.truemesh.com/archives/000342.html Tags :  Team Work |...

Blue Green Deployment

If you find it a futuristic goal, it is not because it is rocket science, it is because basic principles and good professionals practices that should be applied for wise business reasons are missing: http://martinfowler.com/bliki/BlueGreenDeployment.html We are in 2010 and these things are are around from at least 10 years (Agile software development is about 20 years old).  There is always time to download the latest beta version of some kind of tool, there should always be time also to learn new modern skills too :) Tags :  Team Work | Agile | Pratiche | Creatività | Innovazione | Progettazione Software | ...

make-it-easy

Il modo migliore di imparare a scrivere i test con i mock object é quello di iniziare a scriversi i mock a mano.  Chi infatti inizia a usare i tool di mocking spesso gli usa a sproposito. Questo é uno dei tanti esempi di come fare la cosa giusta concentrandosi prima sullo skill e solo dopo sul tool. Oggi ho una nuova opportunitá di fare la cosa giusta: il codice dei test deve essere breve, semplice e leggibile cioé descrivere chiaramente cosa si sta testando e qual'é il comportamento atteso. Una delle cose necessarie a raggiungere questo risultato é...

Avoiding Nulls with "Tell, Don't Ask" Style

... and so avoiding also the duplication of IFs: read the full post from Nat Pryce Tags :  Team Work | Agile | Pratiche | Progettazione Software | Traduci al ITALIANO >>>

Are you an amateur or a professional?

Are you an amateur or a professional? Look for example at  bicycle riders: amateurs care mostly about the bike, the frame, the gears, the forks and so on; professionals focus on training to improve their skills and their performances during the race. When a software development project face a challenge or a problem, do you find yourself looking at the tools or at the skills of the people ? Just answer and tell the truth. So you will know if you are an amateur of software development or a professional. Update: this topic has many facets and many trade-off, still no exceptions here, when...

P ≠ NP

Una dimostrazione del noto problema P ≠ NP é stata proposta ed é nella fase di peer-review tra ricercatori del settore. Qui il post originale: http://gregbaker.ca/blog/2010/08/07/p-n-np/ Una nota per i programmatori da LightSwitch™: no, non é un problema di comparazione tra 2 stringhe, é informatica  :D Edit: allo stato attuale sono emersi due errori importanti nella dimostrazione che la invaliderebbero. Tags :  Creatività | Innovazione | Progettazione Software | Translate into ENGLISH >>>

“Start spreading the news”: the future of IronRuby

Il post completo: http://blog.jimmy.schementi.com/2010/08/start-spreading-news-future-of-jimmy.html Tags :  Creatività | Innovazione | Progettazione Software | Translate into ENGLISH >>>

Interesting algorithms

From Craig Reynolds, steering behaviors for autonomous characters : Simple behaviors for individuals and pairs: Seek and Flee Pursue and Evade Wander Arrival Obstacle Avoidance Containment ...

The Singularity System

From eXtreme Computing Group @ Microsoft Research, The Singularity System: a safe, modern programming language let Microsoft rethink the architectural trade-offs in its experimental operating system. http://cacm.acm.org/magazines/2010/8/96608-the-singularity-system/fulltext Tags :  Creatività | Innovazione | Progettazione Software |

Versioning (5)

So far, as reported here - Versioning (1) - Versioning (2) - Versioning (3) - Versioning (4) team that do in-house development and also many other teams have the possibility to adopt practices that extremely simplify versioning for the modules (assembly, jar, dll, exe, binaries in general, excluding executables as web-applications, services and web-services) and speed-up developments: no need for modules to provide support and bug-fixing for previous versions deal properly the beta, release candidate and official release cycles ...

Code as Design: Three Essays by Jack W. Reeves

Pubblico e mi annoto i link di questi tre essay assolutamente interessanti e attuali. Segnalati da Piergiuliano Bossi su XPUG-IT. http://www.developerdotstar.com/mag/articles/reeves_design_main.html Tags :  Team Work | Agile | Progettazione Software | Translate into ENGLISH >>>

Come fai a capire che un problema é troppo grande?

Faccio un esempio. Chi é del mestiere da prima del 2000 ha assistito al passaggio dalle applicazioni Winform a quelle Web, dalle applicazioni Client-Server a quelle distribuite. E probabilmente ha assistito ad alcuni progetti finiti male: troppo lenti, troppo fragili, incapaci di sostenere il carico degli utenti, etc. Alcune aziende hanno avuto la possibilitá di imparare dagli errori e altre non ne sono state capaci o non hanno potuto. In realtá ogni volta che cominciamo un nuovo progetto, o un nuovo sprint, o cerchiamo di imparare qualcosa di nuovo, c'é la possibilitá che il problema sia troppo complesso per il tempo o le risorse/energie...

Versioning (4)

Versioning for every module (assembly, jar, dll, exe, binaries in general, excluding executables as web-applications, services and web-services) can be even further simplified when the software development team that develop the module is  the same team that use the module in their applications or at least the two team can agree on a common release date for the application and the module. In pracatice when both teams has synchronized time-boxed sprints and releases. In this case for the modules there is no need to have an explicit beta=>release-candidate=>official cycle, the last source code for the code can...

What is a Framework?

An object-oriented abstract design for a particular kind of application, also called a framework, consists of an abstract class for each major component. One important characteristic of a framework is that the methods defined by the user to tailor the framework will often be called from within the framework itself, rather than from the user's application code. The framework often plays the role of the main program in coordinating and sequencing application activity. This inversion of control gives frameworks the power to serve as extensible skeletons. The methods supplied by the user tailor the generic algorithms defined in the framework...

Framework: Three Examples

Three Examples: Every attempt to determine the correct abstractions on paper without actually developing a running system is doomed to failure. A framework is a reusable design, so you develop it by looking at the things it is supposed to be a design of. ... Develop three applications that you believe that the framework should help you build. These applications should pay for their own development. Source: Evolving Frameworks: A Pattern Language for Developing Object-Oriented Frameworks, Don Roberts and  Ralph Johnson, 1996 Tags :  Team Work | Agile | Progettazione Software | Traduci al ITALIANO >>>

About frameworks

Ralph Johnson is one of the gang of four that published Design Patterns (http://www.refactory.com/people/ralph.html). And has been deeply involved in the Smalltalk community. In the 80's he published some papers about framework, that still today are the most interesting and advanced literature on that topic. From these papers also originate the position of the XP and agile community about frameworks. If you looks at frameworks and libraries and components in use today, you can see that many of those learning are still unused. So those paper today are an opportunity to learn something useful, to be on the edge. Here...

Design principle, dalla teoria alla pratica

La prima volta che ho letto e imparato i principi di disegno, gli ho usati come guida e ispirazione nel mometo di immaginare e disegnare le classi di un sistema, magari mentre le disegnavo in UML. La seconda volta che ho (ri)imparato i principi di disegno, ho imparato a guardare il codice di una classe e indicare precisamente la riga dove c'é una violazione di un principio, spiegare il perché e indicare come rimuovere la violazione. E per questo mi ha aiutato il TDD. Questa é la terza volta che sto (ri)imparato i principi di disegno, sto cercando di applicarli strettamente...

Work must begin with...

Since people make things, work must begin with developing people - Eiji Toyoda source: http://www.toyota-global.com/company/vision_philosophy/toyota_production_system/quiz_on_the_toyota_production_system.html Tags :  Team Work | Agile | Progettazione Software |

Micro-esercizio di TDD 2

Gli unit test sono uno strumento che guida il disegno del codice e la lente che evidenzia i difetti del disegno nel codice esistente. Propongo questo secondo micro-esercizio di TDD é un classico problema, quello di testare in presenza di membri statici o di singleton. Immagina di aver ereditato il codice che produce e poi stampa i biglietti di attesa con il numero del turno: la classe TurnTicket che rappresenta il biglietto col numero del turno, la classe TurnNumberSequence che genera la sequenza dei numeri e TicketDispenser che restituisce ogni volta un nuovo biglietto per il turno. (http://www.pastie.org/1039025) ...

Versioning (3)

Versioning for every module (assembly, jar, dll, exe, binaries in general, excluding executables as web-applications, services and web-services) can be further simplified when the module used in a code-build-test-deploy environment has Continuous Integration and the application that uses the modules has sufficient automatic tests as acceptance integration and unit tests, and at every automatic build the last official binary version or source code of the module is pulled into the build. In this case for the modules there is no need to trace and document breaking changes (i.e. for the public interfaces, for the...

Prova sul campo di NDepend v3 (1/2)

Ho provato sul campo la nuova versione di NDepend: v3. Con la SuperSolution, cioé la soluzione che include centinaia di migliaia di righe di codice e tutti i progetti della azienda per cui lavoro. La nuova versione v3 suppporta Visual Studio 2005, 2008 e 2010 nelle varie edizioni. Durante l'installazione ho scelto di usare NDepend totalmente integrato nel IDE di Visual Studio, una nuova feature della v3. Ho visualizzato e analizzato attentamente il grafico delle dipendenze degli assembly per eliminare delle violazioni dei principi di coesione e accoppiamento dei package e per indagare alcune dipendenze misteriose ho visualizzato e analizzato il grafico...

Il Manifesto Agile tradotto in Italiano

Alcuni amici hanno tradotto il manifesto agile in Italiano realizzando la versione italiana ufficiale che trovate anche nel sito agilemanifesto.org. Eccola qui:     http://agilemanifesto.org/iso/it/ La trovo decisamente utile, per verificare la propria comprensione e per passarla anche a quei colleghi e manager  curiosi sullo sviluppo agile del software, ma non cosi tanto da mettersi a tradurre un testo dall'inglese. Tags :  Team Work | Agile | Progettazione Software | Translate into ENGLISH >>>

Versioning (2)

In order to reduce the costs, visible and hidden ones, of giving support for previous versions:    Microsoft have tried hard many years to push his customers to use the latest versions of his software products as Visual Basic, Visual Studio and related technologies. When can you simplify here ? And how ? Versioning can be simplified for every module (assembly, jar, dll, exe, binaries in general, excluding executables as web-applications, services and web-services) that actually is used only by a partners or by a software develoment team inside your organization and in...

Scientific empirical evidences on PP effectiveness

The known empirical studies about effectiveness of Pair Programming are well documented on Wikipedia: - Pair programming scientific studies   6 empirical research examined   experiments conducted with both professional software developers and with students   experiments published between 2000 and 2009   http://en.wikipedia.org/wiki/Pair_programming#Scientific_studies Here are links of cited studies that now are broken on the Wikipedia page: - The effectiveness of pair programming: A meta-analysis, 2009   http://www.idi.ntnu.no/grupper/su/publ/ebse/R11-pairprog-hannay-ist09.pdf - Pair programming productivity: Novice–novice vs. expert–expert, 2006   http://userweb.cs.utexas.edu/users/mckinley/305j/pair-hcs-2006.pdf Overall the empirical studies report contrasting results about effects of PP on quality, duration and effort. They all agree that  PP works well when...

Scientific empirical evidences on TDD effectiveness

Here the known empirical studies about effectiveness of TDD: IMPROVING BUSINESS AGILITY THROUGH TECHNICAL SOLUTIONS: A Case Study on Test-Driven Development in Mobile Software Development, 2005 1 study in industrial context http://agile.vtt.fi/docs/publications/2005/2005_business_quality_ifip.pdf Test driven development: empirical body of evidence, 2006 7 studies documented in industrial context 6 studies documented in academic context conducted between 2001-2005 http://www.agile-itea.org/public/deliverables/ITEA-AGILE-D2.7_v1.0.pdf TDD--The...

Versioning (1)

As software engineers we should be aware of the costs of dealing with versioning and tracking compatibility breaking changes. And we should be able, in every software product, team and organization, to see where and when versioning is really needed, and so use it properly. By a practical point of view, as is very effective in security to start with all permissions disabled and then enable only the really needed permissions case by case, in versioning I've noticed that is very effective  to start with no versioning and begin to use versioning only when a real need emerges (e.g. through ...

I will be @ XP2010 Reloaded

Matteo has announced he will be at XP2010 Reloaded in Bolzano. I will be there too, sharing some empirical finding about TDD. XP2010-Reloaded 1st International Workshop on eXtreme Programming and Applications September 15, 2010 Bozen-Bolzano, Italy Paper submissions:   June 25, 2010 - http://xp2010-reloaded.case.unibz.it/ Matteo Vaccari ha appena annunciato la sua presenza ad XP2010 Reloaded in Bolzano. Ci saro pure io, condividendo delle osservazioni empiriche raccolte facendo TDD. XP2011 sará in Spain il prossimo anno e la comunitá Agile spagnola sta gia preparendo l'evento come una occasione per incontrare la comunita Agile internazionale. XP2010 Reloaded da la medesima opportunitá, giá quest'anno, a...

Micro-esercizio di TDD, soluzioni a confronto

Ecco le varie soluzioni postate per il micro-esercizio di TDD: http://pastie.org/994235 - C#, TDD con mock objects http://pastie.org/994831 - C#, TDD con mock objects http://pastie.org/994969 - C#, TDD con mock objects http://pastie.org/997427 - Python, TDD test du accettazione: http://pastie.org/1001378 unit test e codice risultante: http://pastie.org/1001380 - Python, TDD con...

Micro-esercizio di TDD

Gli unit test sono uno strumento che guida il disegno del codice e la lente che evidenzia i difetti del disegno nel codice esistente. Propongo questo micro-esercizio di TDD per confrontare e riflettere come soluzioni diverse guidano a scelte di disegno diverse. Immagina di aver ereditato il codice di queste due classi: Sensor che legge in tempo reale il valore attuale della pressione in psi (pound per square inch) di un pneumatico e restituisce il valore; Alarm che verifica il valore corrente della pressione e avvisa quando esce dal intervallo di valori normali. (http://pastie.org/993782) Il micro-esercizio...

Upcoming Agile events!

Conferencia Agile-Spain 2010, Madrid, 10-11 June - http://conferencia2010.agile-spain.com/ 1st International Workshop on eXtreme Programming and Applications September 15, 2010 Bozen-Bolzano, Italy Paper submissions:   June 25, 2010 - http://xp2010-reloaded.case.unibz.it/ Tags :  Team Work | Agile | Eventi | Progettazione Software |

L'arte di programmare, codice e pensieri

Translate into ENGLISH >>> Segnalo due link decisamente interessanti dove ci sono argomenti molto pratici e concreti e codice per esercitazioni pratiche:   http://essap.dicom.uninsubria.it/pmwiki.php?n=Main.LetsDoItAnAgileMicroproject   http://matteo.vaccari.name/tai/diario Resi disponibili da Matteo Vaccari Tags :  Team Work | Agile | Pratiche | Progettazione Software |

Impersonator pattern

Traduci al ITALIANO >>> The impersonator pattern is a testing architecture pattern. It deals with the problem of performing integration and functional tests over unstable, slow, not always available,  data-changing or inexistent integration environments by providing an implementation which mimics the exact protocols and semantics of those environments while requiring minimal resources and providing full control over execution and managed data. Read @  http://blog.rufiao.com/2009/08/impersonator-pattern/ Tags :  Agile | Pratiche | Progettazione Software |

Fear driven programming

Traduci al ITALIANO >>> Fear driven programming:  /fɪə(r) draɪvn prəʊgræmɪŋ / noun definition: copy-paste, add a new flag and a new IF, never change/delete code, put new classes in a new project/code repository Treatment: To enable code-base-wide refactoring and deletion of unused code: merge all repos in one repo, replace unnecessary Reflection abuse and replace IoC (and similar) harmful XML Configcopy-paste, add a new flag and a new IF, never change/delete code, put new classes in a new project/code repositorycopy-paste, add a new flag and a...

Web Frameworks have two weaknesses

Traduci al ITALIANO >>> Web Frameworks have two weaknesses : they don’t scale beyond a certain point and, much worse, they trap you inside the framework: they are monotheistic frameworks Think about the solutions the framework you are using provides for Session data, Transaction management, Authentication or  authorization: are open and integrable with other custom solutions or do it trap you inside the framework ? If you think the web app you are working on will...

Node-level-redundancy Vs tier-level-redundancy

Leggi l'articolo: Large Web App Architecture: Yes to Thicker Stack on One Hardware Node, No to Beautiful “Redundant” Spiderwebs Tags :  Progettazione Software |

Why? Perche?????

Traduci al ITALIANO >>> Why spend your life developing software unless you care about doing it well?   From The pragmatic programmer Tags :  Team Work | Agile | Pratiche | Progettazione Software |

Funny hard to die myths about software development

Traduci al ITALIANO >>> We already all know about this, but still very funny :) Twitted by Joseph Pelrine Looks also: 3 myths about software development Tags :  Team Work | Agile | Leadership | Team | Cliente | Aziende | Team building | Progettazione Software |

Replace conditional with...

Traduci al ITALIANO >>> Conditional statements like "If" and "switch" multiply the number of possible flows the code execution can follows. So they increase the complexity and the number of tests required to verify the code. => Conditional statements are time and effort (costs €€€) multipliers Here is a list of known techniques to eliminate conditionals : Replace conditional with polymorphism (look also the patterns template method and pluggable selector and  abstract factory) The patterns Null Object and Special Case ...

Tools build productivity like keyboards build software

Traduci al ITALIANO >>> People, skills and actual work come first.  And if you don't get it, gets a new job.  Even better, retires :D Courteously shared by Riccardo. Tags :  Team Work | Agile | Tools | Semplicità | Progettazione Software |

La prova del 9

Translate into ENGLISH >>> Ecco dei numeri chiari, semplici e immediati per valutare il lavoro di un team sulla code-base: Guarda a quelli del tuo team, quando i numeri sono in modo evidente fuori scala e ancora in crescita é facile farlo notare al team e al CTO e chiedere loro di scoprire la causa e come cambiare questa tendenza: Principio K.I.S.S. verifica se lo applichi davvero Keep the Peel and Throw Out the Banana Come va il QI di gruppo nel tuo team? Se per esempio la code-base scomposta in...

Principio K.I.S.S. verifica se lo applichi davvero

Translate into ENGLISH >>> Guardando i numeri, diresti che il tuo team pratica realmente il principio K.I.S.S. o diresti che segue la legge di Parkinson ?  .NET Framework 2.0 il nucleo é composto in tutto da soli 12 Assembly per piú di 12.000 classi (una media di 800 per progetto) e 2.800.000 istruzioni IL (190.000 per progetto) Fonte: Analyzing the .NET Framework 2.0 with NDepend  Google ha un singolo source code repository che é completamente accessibile a tutti i 10.000 sviluppatori. Sebbene tutti i sistemi vengono rilasciati indipendentemente l'uno dall'altro...

Divide et impera ... is a flawed principle

Divide et impera ... is a flawed principle. Merge and simplify ! Is the binomial formulas of software engineering :         a * b + a * d => a * (b + d)         Source 1: Uwe Aßmann from Linköpings Universitet Source 2: Addition through subtraction Tags :  Team Work | Agile | Pratiche | Progettazione Software |

Shaking Forest

Translate into ENGLISH >>>    L'ultimo sketch di questa serie realizzato con Processing.   Il piú Rock! Clicca l'immagine per vedere on-line il video (a bassa risoluzione) oppure scarica il codice e esegui localmente per creare il video QuickTime ad alta qualità: Tags :  Creatività | Innovazione | Progettazione Software |

Colors of the autumn leafs dance

Translate into ENGLISH >>>    Un nuovo sketch realizzato con Processing. Come le precedenti é una animazione video ottenuta esplodendo in 3D un immagine che in questo caso è una fotografia. L'asse Z è ottenuto usando l'informazione della luminosità di ogni pixel. Poi gradualmente ogni pixel viene riportato sul piano XY con Z=0. Per vedere la fotografia usata per l'animazione clicca qui. Per vedere on-line l'animazione con l'applet java (a basso frame rate) o scaricare il codice e eseguirlo localmente (per creare il video QuickTime ad alta qualità) clicca qui: ...

Il ciclo di vita delle tecnologie di accesso ai dati

Translate into ENGLISH >>> Osservando applicazioni software di successo in aziende di successo (longeve) mi è capitato di vedere base di dati con 30 anni di vita ancora arzille e vitali e applicazioni software con 10 anni di vita ancora sviluppate e in uso. Guardando alle code-base di vari team, una cosa che talvolta mi salta all'occhio è la presenza contemporanea nella stessa applicazione di più tecnologie di accesso ai dati incompatibili tra loro (non possono condividere connessione, transazione, lock, recordset/DTO/mapping, query). Questo mi ha fatto riflettere sul ciclo di vita delle tecnologie di accesso ai dati Microsoft...

Undecided / Incerto

“ Some problems are so complex that you have to be highly intelligent and well informed just to be undecided about them. ” --Laurence J. Peter Tags :  Team Work | Agile | Complessità | Progettazione Software |

Rain of colors into Van Gogh self portrait 1886

Translate into ENGLISH >>>    Un nuovo sketch realizzato con Processing. E' una animazione video ottenuta con la stessa tecnica dallo sketch precedente. Guarda il video (con audio): Clicca qui per vedere on-line l'animazione con l'applet java (alta definizione, basso frame rate) e il codice sorgente con cui è possibile creare il video QuickTime in locale. Tags :  Creatività | Innovazione | Progettazione Software |

Rain of colors into Van Gogh Mulberry tree (Processing)

Translate into ENGLISH >>>    Un nuovo sketch che ho realizzato con Processing. È una animazione video ottenuta esplodendo in 3D l'immagine del quadro Mulberry tree di Van Gogh. L'asse Z è ottenuto usando l'informazione della luminosità di ogni pixel. Poi gradualmente ogni pixel viene riportato sul piano XY con Z=0. Clicca l'immagine per vedere on-line un draft dell'animazione con l'applet java e il video completo da YouTube (clicca dalla pagina originale, non da quella tradotta): Tags :  Creatività | Innovazione | Progettazione Software |

Release Often (rilascia spesso!)

Now in 2009 the practices reported here are well established and accepted. Already in 2006 the same practices emerged in the sw dev team of the F1 Racing Team I was part of and was reported in the keynote speach at the Italian Agile Day 2006. Oggi queste pratiche descritte qui sono note e riconosciute da (quasi) tutti. Già nel 2006 queste pratiche sono emerse spontaneamente nel team di sviluppo sw del team di F1 di cui ho fatto parte e sono state citate nella keynote del Italian Agile Day 2006.     How it works in Google as reported by Mark Striebeck...

Agile Cultural Patterns

From XpDay 2007 session People vs Process - Cultural Patterns of Software Organisations the slide here. The session on video on InfoQ: Beyond Agile Tags :  Team Work | Agile | Team | Progettazione Software |

Criteria to assess the usefulness of a unit test

From the keynote at XpDay London: Mark Striebeck, engineering manager at Google where he is responsible for developer testing infrastructure, tools and adoption. Here are some criteria to assess the usefulness of a unit test How often the test fails? When the test never fails there are chances that it is not testing anything that need tests. Has the test been marked as "ignore" to...

Gartner suggest to use an Emergent Enterprise Architecture

Gartner has identified seven properties that differentiate emergent architecture from the traditional approach to EA: Non-deterministic - In the past, enterprise architects applied centralised decision-making to design outcomes. Using emergent architecture, they instead must decentralise decision-making to enable innovation. Autonomous actors - Enterprise architects can no longer control all aspects of architecture as they once did. They must now recognise the broader business ecosystem and devolve control to constituents. Rule-bound actors - Where in the...

Creativity loves constraints, ideas come from everywhere

Marissa Mayer Innovation, design and simplicity This talk was given on March 14, 2008 in Portland, Oregon at the 39th Technical Symposium on Computer Science Education (SIGCSE 2008) From the presentation, important skills set for real-life software projects: Large projects & legacy code: taking an existing piece of code and changing it Scale: write code that scale and tests that support that scale requirements Resilience & Robustness: write algorithms that are inherently robust instead of recurring to manual tuning Working in team: no...

The six blind men and the elephant

Perception and Prejudice You may know the story of the six blind men and the elephant. Each blind man is touching a different part of the elephant. One is touching the tusk and thinks that it is a spear. Another is touching the leg and thinks it is a tree trunk. If you tell them that they are all touching the same thing, it is very likely that they will argue about what it is. Unless they are also truthful about their own limitations, it will be difficult for them to come to a unified vision about what...

Coaching Self-Organizing Teams

Una presentazione molto interessante sulle applicazioni pratiche della scienza della complessitá alle dinamiche di team. Un libro è in preparazione, Joseph Pelrine tiene corsi con esercitazioni pratiche e simulazioni sociali (è il prox corso a cui mi interessa partecipare) per vedere i meccanismi in azione e imparare ad utilizzarli, e nelle conferenze/presentazioni condivide pratiche che si basano sui progressi scientifici di questa nuova disciplina. Per ora ecco la presentazione: http://www.infoq.com/presentations/coaching-self-org-teams Summary Self-organization is a tricky thing. Agile coaches are challenged with how to motivate/persuade/trick their teams into self-organizing and doing things, without telling them what to do. This tutorial presents an...

CouchDB + C# = Divan (c'è un esperto italiano?)

Tra un paio di settimane Göran Krampe lo sviluppatore della libreria .NET Divan di accesso al DB Non Relazionale CouchDB terrà una conferenza proprio su Divan qui a Stoccolma. E proprio oggi ho partecipato alla sua conferenza introduttiva su CouchDB. Mi chiedo, in italia c'è qualche dev che è esperto di DB non relazionali  (perchè gli usa sul lavoro o è convolto in qualche progetto open source)  che voi sappiate ? Tags :  Progettazione Software |

Ken Robinson, Do Schools Kill Creativity?

Kids will take a chance. If they don't know, they'll have a go.  They're not frightened of being wrong. Now, I don't mean to say that being wrong is the same thing as being creative. What we do know is, if you're not prepared to be wrong, you'll never come up with anything original. If you're not prepared to be wrong. Fonte: Can Scrum Help Facilitate Creative Process? Tags :  Team Work | Agile | Creatività | Innovazione | Progettazione Software |

Andrea e Dino spaccano anche in Svezia

Oltre al Francesco nazionale la cui campagna anti-if e la tecnica del pomodoro che in Svezia sono conosciute tanto quanto e forse più che in Italia tra i dev più smart ... ...sulla scrivania di un collega trovo in bella mostra il libro del Presidente che anche qui in Svezia spopola e spacca !!! Mi sono subito vantato col collega che conosco Andrea e che faccio parte della comunità italiana di .NET, ho sfogliato il libro ricordando i temi che nel tempo sono stati condivisi e discussi nella community, ho ricordato il progetto NSK che ho inizialmente seguito. E per finire all'italiana, ho...

Conway's Law (persone e sw)

Conway's Law Organizations that design systems are constrained to produce designs which are copies of the communication structures of the organization.     Conway's Law is a valid sociological observation. You can find case studies from the Harvard Business School (here the pdf) and from Microsoft Research (here the publication and also here: The Influence of Organizational Structure on Software Quality: An Empirical Case Study). Some interesting pratical example of organizational and cultural factors is in Mike Cohn presentation: Scaling Scrum and Working...

Do we really need Domain Specific Languages ?

One of the features of DSLs often cited is enabling non programmers to write "computer programs" in near natural language. So for example business people or final users will be able to write requirements for a software application in plain English and developers will be able to "run" the requirements just like a computer program that test and verify  the application against the requirements. Well, not in plain English, but at least in a way easier to understand to business people or final users than the current alternative e.g. FitNesse. Michael Feathers points out that even when using a natural...

Tests: a Glossary

Developer tests: Unit tests : Isolated, atomic, innocuous: exercised with xUnit often  in combination with mocks objects => useful to improve code quality with continuous design Integration tests: Isolated tests that might change the state of the system, i.e: saving into database, writing file... An integration test does not represent a functional requirement as is. Can be written for xUnit. They check the integration of our code with a third party tool or with the different layers of our own code, i.e: the...

Seven Blind Alleys in Software Design by Michael C. Feathers

I 7 vicoli cechi sono elencati e descritti nel post originale che segnalo:  Michael C. Feathers: Seven Blind Alleys in Software Design Questa è una tentazione moderna legata ad alcune aspettative che vanno oltre gli scopi del Domain Driven Design : 5. Modeling the real world Pure questa è una tentazione moderna legata a aspettative che vanno oltre gli scopi dei linguaggi DSL: 7. Natural Languages Queste 2 sono tornate in voga con la diffusione definitiva dei linguaggi OO: 3. The Ultimate Abstraction 4. The perfect taxonomy Queste 3 sono idee che ritornano ciclicamente e finora senza significativi o duraturi successi: 1. Programming in Pictures 2. Metaprogramming...

End of the RDBMS Era?

Not yet but... read this:  Is the NoSQL Meeting Announcing the End of the RDBMS Era? This is about non-RDBMS data-stores used e.g. by LinkedIn, Facebook, SpringSource, Google. Here are the names of some of these non-RDBMS data-stores: memcached, Tokyo, Redis, Voldemort, MongoDB and Cassandra, Amazon S3, Hadoop Hive, Maglev and Solr. Read more about here: Nosql if only it was that easy Most of them are Key/Value or document database. They leave up ACIDity and data normalization and predefined data schemas in favor of performances, scalability, flexibility and resiliency. If you need transactions, full time data consistency and do reporting...

3 myths about software development

The code quality is related to the available time for implementing the solution wrong code quality is related to developer's skills and is related to company's structure and organization in teams and departments  ((it took me 30 years to learn from practice what my grandmother told me when I was young: it takes as much time to do something wrong as it take to do it right))) The...

Db deploy: SQL delta scripts Vs ActiveRecord Migrations pattern

Tool: ToughtWorks DbDeploy.NET - use ActiveRecord Migrations pattern - You can use other approaches if you have an ORM and you haven't released to production yet. - You shouldn't use this pattern When you have a huge legacy database - reference:  http://www.dbdeploy.net/ Tool: Dbdeploy - use SQL delta scripts - for developers or DBAs who want to evolve...

Hai un buon rapporto con le nuove tecnologie ? (Project complexity budget)

Un articolo che mi ha fatto riflettere, molto interessante spiega la tesi che spendere il complexity budget sulla Continuous Integration e a cascata TDD ha un impatto positivo sul progetto maggiore che investire su programming languages e frameworks:    Taming the project complexity budget by focusing on continuous integration Quale di queste 2 progetti descritti qui preferisci ? Project is “awesome”, as it uses nice a programming language plus frameworks and tools. Design is “perfect”, methodologies are used...

Hai un buon rapporto con le nuove tecnologie ?

Un programmatore senior si crea degli spazi sicuri per il divertimento, la scoperta e l'apprendimento di nuove tecnologie[1] all'avanguardia, le pesa le valuta quanto sono stabili e affidabili e dopo le usa sul lavoro solo  dove, quando e quanto sono utili al progetto Un programmatore inesperto usa progetti cliente al lavoro per provare nuove tecnologie che non conosce bene, che non ha provato e valutato a sufficenza, i cui benefici al progetto e alle persone sono poco chiari Sei quello che mangi...

Michael Feathers TDD/Refactoring course in Stockholm

In September 15-17 with Michael Feathers the author of  Working Effectively with Legacy Code.    The info about the course are here. While the Nokia Test help to assess the ability of an Agile team to Inspect+Adapt to deal with the Software Development Life Cycle (that for in-house developers includes Operations and Maintenance)...     ...the number of code duplications and of if/switch in the code base can assess the ability of an Agile team to effectively deal with coding: duplications and of if/switch are the primary costs/time multipliers of software development (1 duplication => double the effort for a feature change,...

Tra un buon programmatore e uno ottimo - 2°

Un buon programmatore sa realizzare il disegno di una applicazione nuova Solo un ottimo programmatore sa migliorare il disegno di una applicazione esistente Il disegno di una applicazione nuova rappresenta una dichiarazione astratta di intenti la speranza che altri troveranno il codice semplice e facile da modificare ed evolvere. Il lavoro di migliorare il disegno di una applicazione esistente giorno per giorno è la realizzazione pratica di un disegno e il suo reale utilizzo perchè quotidianamente usa il disegno fatto ieri per semplificare il codice e renderlo più malleabile e oggi realizza un disegno per rendere possibile il lavoro che c'è da fare...

Agile Architecture

From this post an interesting article: "Agile Architecture: Red Pill or Blue Pill." (Jeff Sutherland, 2009) And one more link on this topic: EnterpriseArchitecture 2.0  (James McGovern, 2006) And even one more: Who Needs an Architect?  (Martin Fowler, 2003) What's your experience about this? Tags :  | Progettazione Software | Agile

Scrum: un processo di sviluppo Empirico 2 (Scientists Give Their Opinion)

Riporto dal sito di Ken Schwaber Scientists Give Their Opinion Why do the defined processes advocated by SEI CMM not measurably deliver? We posed this question to scientists at DuPont Chemical's Advanced Research Facility, where research into biochemical processes is applied to process automation. The scientists inspected the systems development process. They concluded that many of the processes, rather than being repeatable, defined, and predictable, were unpredictable and unrepeatable. With that, the scientists explained the difference between predictable (defined) and unpredictable (empirical). ... A defined process is predictable; it performs the same every time. An empirical process requires close watching and control, with frequent intervention....

Scrum: quando non é divertente, c'e qualcosa che non funziona

Uno delgli Smell di Scrum:  quando non é divertente, c'e qualcosa che non funziona Tags :  Team Work | Agile | Team | Progettazione Software |

Decisions by consensus without compromise

One of the Toyota Way principles is « Nemawashi », take decisions by consensus. ... The consensus-building process solicits ideas and review from everyone involved so that the final idea is usually a lot stronger than the original. But there’s one big misunderstanding about consensus. Consensus doesn’t require Compromise Leggi il post : http://blog.nayima.be/2009/06/19/nemawashi-decisions-by-consensus-without-compromise/ Guarda anche: Negoziazione integrativa : nasce dalle differenze Tags :  Team Work | Agile | Lean Agile | Conflitto | Negoziazione | Motivazione | Progettazione Software |

Qualità subito

Il principio XP che guida questo modo di procedere è  Quality Ecco l'esempio di alcuni criteri di qualità che richiedono tempo e sono indispensabili già da subito e quindi vanno conteggiati nelle stime dei tempi : il codice deve essere nel Source Code Repository il software deve avere una Build Automatica con i rispettivi test il software deve avere degli script di deploy / un setup kit con la gestione del versioning ...

Qualità in Small-Safe-Steps

I principi XP che guidano questo modo di procedere sono Improvement, e Baby Steps Ecco degli esempi di miglioramenti della qualità che richiedono tempo e sono a rischio di errore e quindi vanno fatti in modo incrementale : Remove code duplication tra 2 diverse classi o pagine aspx, tra una una pagina asp e una aspx - quando è la nuova feature che si sta scrivendo che crea la duplicazione invece di eliminarla subito è più sicuro prima crearla rendendola evidente e scrivere i test e  solo poi provare a eliminarla. cosi si consegna la nuova feature funzionante,...

Qualità a tempo zero

Ecco esempi di miglioramenti della qualità del codice  che non richiedono tempo ma solo la conoscenza tecnica e la consapevolezza che sono utili: Rename di classi, metodi, argomenti, variabili con nomi che descrivono in modo chiaro cosa fa il codice - anche un nome lungo e prolisso è meglio di una lettera o un acronimo incomprensibile Replace dei commenti con estrazione di blocchi di codice in un nuovo metodo e introduzione di variabili intermedie con nomi esplicativi - il codice viene compilato ed eseguito per queto...

A View on the Future of Agile e Beyond Agile

Queste slide sono anche l'occasione per scoprire la storia dell'Agile dalla sua nascita, come è vista l'adozione dell'Agile in italia e perchè e la Tecnica del pomodoro tutta italiana. Ecco le slide di A View on the Future: http://www.crisp.se/futureofagile/slides/davidanderson E qui la presentazione Beyond Agile: Cultural Patterns: http://www.infoq.com/presentations/beyond-agile Tags :  Team Work | Agile | Lean Agile | Pratiche | Leadership | Creatività | Innovazione | Progettazione Software |

Design strategies: Kent Beck presentation

I've seen this presentation, found it very useful : http://www.infoq.com/news/2009/06/responsive-design Some quick excerpt from the presentation here. A design goal: Steady Flow of ... Features ! A design definition: Beneficially Relating Elements (that's a thing and also an action) Design principle: safe steps Some design strategies: Leaps vs Parallel, Stepping Stone vs Simplification  (here slides that explain this http://www.slideshare.net/deimos/kent-beck-effective-design) Tags :  Team Work | Agile | Complessità | Pratiche | Creatività | Innovazione | Semplicità | Progettazione Software |

Scrum: Roles & Responsibilities

Product Owner ► Prioritizes features according to market value ► Is responsible for the profitability of the product (ROI) ► Defines the features of the product and decides on release content ► Can change features and priority after every Sprint ► Accepts or rejects work results ScrumMaster ► Ensures that the team is fully functional and productive ► Enables close cooperation across all roles and functions and removes barriers ► Shields the team from external interferences ► Ensures that the process is followed. Invites to daily scrum, Sprint review and planning meetings Team ► Cross-functional, seven plus/minus two members ► Selects the iteration goal and specifies work results ► Has the right to...

Breaking changes Refactoring 2° di 2

    Per esempio sollevare una eccezione che prima era silenziata e ignorata - aggiungere un vincolo di unicità per due colonne di una tabella Team Work Nel tecnico esperto con competenze di refactorig prevale il coraggio di cambiare per migliorare il codice e la consapevolezza che i vantaggi sono maggiori dei rischi Nel tecniico che ha la conoscenza storica del sistema prevale la tendenza a limitare cambiamenti che possono compromettere il sistema Nel CTO attento alle esigenze degli utenti/clienti prevale la attenzione all'operatività del sistema in uso e alle conseguenze pratiche di un malfunzionamento Invece di  radicare queste differenze...

Breaking changes Refactoring 1° di 2

    Per esempio sollevare una eccezione che prima era silenziata e ignorata - aggiungere un vincolo di unicità per due colonne di una tabella Tecnica di coding      Fare l'analisi statica del codice  - tipo Find Usages con Resharper - in modo esaustivo può richiedere uno sforzo eccessivo ed essere insufficente ((( per es. perché c'è codice VB6 o C++ che il tool automatico non copre ))) e testare il sw in esecuzione può essere a rischio di errore ((( per es. la modifica può avere conseguenze sorprendenti/impreviste )))   Più di tutto con solo queste 2 tecniche non si...

New York Times Dropping WPF/Silverlight for Adobe AIR

Qui l'articolo : http://www.infoq.com/news/2009/05/Times-AIR-Reader Alcuni estratti    lack of cross-platform support ... most developers seem to end up maintaining two separate code bases ... Apple users complained about not having all the same features as Windows users La domanda la giro agli esperi di UGI per il diritto di replica: è davvero cosi ? Tags :  Progettazione Software |

Linq2Sql, carenze imbarazzanti

Annoto delle carenze ... imbarazzanti  ( cosi le definirebbe l'ex collega Riccardo :D ) non c'è modo di specificare Hint al Database per ottimizzare/indirizzare il piano di esecuzione di una query la proprietà AutoSync che determina se dopo in INSERT venga eseguito o meno un SELECT per avere in ritorno i valori di campi autoincrement non si può indicare a livello di singola query ma solo di DataContext non c'è modo di eseguire Bulk Insert ossia insert massivi in una unica operazione massiva (come quando si fa  INSERT a_table (colA, ...,...

Axum, Microsoft’s Approach to Parallelism

Axum applica il pattern Session/Application [1] per definire e gestire l'accesso concorrente a ricorse condivise Lo fa implementando il concetto di domain  (un domain definisce un gruppo di risorse condivise e usate in modo concorrente e domini diversi sono gruppi di risorse tra loro isolati) e quello di agents che eseguono parallelamente operazioni su dati e risorse condivise Quindi implementa il Modello a Competizione [1] Agents diversi possono scambiarsi messages cioè second il Modello a Sincronizazione [1] detto anche produttore-consumatore detto anche Message Passing. Non ho notizie riguardo alla implementazione da parte di Axum (presumibilmente non sono supportate/implementate) di -...

Is Parallel Programming Hard?

Un articolo pubblicato su InfoQ che ribadisce i risultati emersi dall'articolo risultato dal brainstorming su XP-IT circa le applicazioni multi-threading e il TDD Un motivo in più per segnalarlo a chi sviluppa app multi-threading: Design di applicazioni multi-threading Tags :  Team Work | Agile | Pratiche | Creatività | Innovazione | Progettazione Software |

Semplicità: valutare l'andamento di un team Agile

Nel post Scrum: un processo di sviluppo Empirico sono linkati modi di valutare un team Agile Il post Keep the Peel and Throw Out the Banana di Francesco Cirillo va alla semplicità della questione : Guarda il codice, quando è pieno di IF/SWITCH, casi speciali, diversi tipi di logica accoppiata, bug frequenti, è un campanello d'allarme che dello sviluppo Agile il team ha tenuto la buccia e gettato la banana Guardandomi indietro e riflettendo trovo che nella pratica questo criterio è efficace Tags :  Team Work | Agile | Pratiche | Leadership | Software | Semplicità |

Linq code refactoring: good programmer and bad one

IMHO the difference between a good programmer and a bad one is that a good programmer always strives to do things the straight way while a bad programmer feels smart when he discover and use dirty tricks  -  While refactoring long methods with Linq/Linq2Sql code and so trying to extract some Linq/Linq2Sql code into a new method it do emerge the need to return anonymous types from the extracted method. The C# compiler can complains for this You can Google and find a trick to return anonymous types. While in the first moment it looks interesting by a...

I programmatori migliori usano meno IF/SWITCH (codice di esempio)

     Ecco un esempio con le 2 implementazioni a confronto: Esempio di codice con e senza IF/SWITCH      Ecco altri esempi qui: Codice Anti-If di esempio Tags :  Agile | Pratiche | Disciplina | Professione | Semplicità | Progettazione Software |

I programmatori migliori usano meno IF/SWITCH

     Questa settimana ho visionato una quarantina di soluzioni di un test di programmazione. Le implementazioni meno buone  avevano anche un numero elevato di if/switch (una 40na), quelle migliori anche nessun if/switch. Penso che non è un caso      Resto sorpreso che tra gli skill avanzati di coding che sono assodati e riconosciuti da anni la capacità di evitare gli if/switch inutili e duplicati è ancora ignota a una gran parte di programmatori, e anche da alcuni programmatori di Microsof (vedi qui , mal comune  mezzo gaudio :D). Tecniche per eliminare IF/SWITCH: vedi qui Altri skill avanzati di coding: vedi qui Il passo...

The Internet Of Things: l'italianissimo Arduino fa già parte della storia

Questa è la presentazione Shhh, they're listening, a subjective history of the Internet of Things Shhh, they're listening, a subjective history of the Internet of Things View more presentations from Alexandra Deschamps-sonsino. (tags: iot design) Chi è Arduino ? Guarda qui Cos'è The internet of Things ? Guarda qui Fonte: Alexandra's subjective history of the Internet-of-Things Tags :  Creatività | Innovazione | Progettazione Software |

C# Nullable Types: 2 errori nel disegno

Il punto centrale del pattern nullable object o special case che dir si voglia è quello di evitare gli IF per gestire il Null. E invece ... Nella conversione da int? a string:  non c'è modo di specificare che stringa usare in caso di null senza usare un IF nemmeno con l'operatore ??.  Per es. in una label vorrei poter visualizzare il numero oppure N.A. quando c'è il null e mi tocca mettere un if.     L'abilita principale di un programmatore è sapersela cavare col codice. E invece... Al posto di contare sulla capacità dei programmatori di capire e usare correttamente la logica...

Brian Eno: amplificare la creatività nel team (e con gli U2)

Qualcosa va storto e non si sa cosa fare - la reazione spontanea  è quella di affidarsi alle abitudini consolidate Nei team affiatati il punto di forza della "telepatia" si bilancia con l'eccesso di diplomazia: nessuno vuole mettere  a rischi l'equilibrio che si è creato Brian suggerisce 2 giochi per rompere le regole e aprirsi a nuove cose e a nuovi modi di fare Imporsi dei limiti per incrementare la creatività - per esempio con gli U2 gli ha fatto scambiare gli strumenti cosi che uno suonasse quello dell'altro - obbligarli a suonare con solo una parte della scala Fare...

Design Under Constraint: How Limits Boost Creativity

The same principle applies to design. Given fewer resources, you have to make better decisions The idea of operating within constraints—of making more with less—is especially relevant these days. From Wall Street to Detroit to Washington, the lack of limits has proven to be a false freedom More recently, the very iPhone on which you listen to Davis' landmark album is a one-buttoned example of restraint in pursuit of an ideal, while the sublimely simple Google homepage is forever limited to 28 words Fonte: W.I.R.E.D. Tags :  Team Work | Agile | Creatività | Innovazione | Semplicità | Progettazione Software |

Informatica e Design 3° (Generative Systems)

Game designer Will Wright (SimCity, The Sims) and musician Brian Eno discuss the generative systems used in their respective creative works. Ancora info su questi argomenti ? ~  schemi complessi che emergono dall'implementazione di regole assai semplici come una foresta che nasce da pochi semi (John Conway)  in questo post     ~  simulazioni sociali in questo post ~  NetLogo un sw per eseguire e implementare principalmente simulazioni sociali ma anche sistemi genereativi in questo post Tags :  Team Work | Agile | Complessità | Team | Creatività | Innovazione | Semplicità | Progettazione Software |

Informatica e Design 2° (Brian Eno)

L'area di intersezione tra informatica e design è in continua espansione. In termini di prodotti, tecnologie e applicazioni e anche designer e artisti digitali che sconfinano nella programmazione e programmatori che si dedicano a prodotti informatici di design e artistici La potenzialità che intravedo riguarda la possibilità che programmatori possano scoprie da designer e artisti digitali come lavorare e come affrontare in team problemi in modo creativo e anche contribuire in termini di metodologie e pratiche di programmazione Naturalmente i team agili sono i candidati ideali avendo nel loro nucleo gli aspetti di creatività esplorazione dinamiche di team Brian Eno è un precursore...

Simulazione di fluidi con Blender

Dopo i sw di social networking, ecco un altro sw che da vita alle cose Deve essere estremamente emozionante realizzare sw che ti permettono cose come queste Fonte: Fluid simulations Tags : Complessità | Creatività | Innovazione |Tools | Progettazione Software |

In Sintesi: Design di applicazioni Multi-Threading

Ecco in sintesi una serie di indicazioni utili e per me illuminanti e sorprendenti sul multi-threading: le applicazioni multi-threading sono di un ordine di grandezza più complesse delle altre appicazioni quindi è sensibilmente sconveniente portare in causa il multi-threading quando può essere evitato il ruolo e la principale utilità dello unit-testing e del TDD per le applicazioni multi-threading è quello di portare a disaccoppiare la gestione deil multi-threading dalla logica di business ...

Siamo poi d'accordo su cos'è cattivo codice ? : Risultati

Ecco le opinioni raccolte su cos'è cattivo codice per noi: Le 3 cose che sono state scelte di più come casi di cattivo codice (95%) sono: Nomi di variabili senza senso, incomprensibili, irrintracciabili Mancanza assoluta di naming convention e metodi con nomi fuorvianti Trovare nel codice la stessa cosa fatta in 10 modi diversi Le 3 cose che sono state considerate di meno come casi di cattivo codice (32-33%) sono:  Mancanza di documentazione sulle configurazioni e sul deploy Assenza totale di Unit...

Design di applicazioni Multi-Threading

     Dalla la serie di post e riflessioni che feci sul disegno di applicazioni muti-threading è partito uso scambio interessante su XP-IT e istruttivo Il risultato è una raccolta di indicazioni link e commenti - unica - perché centrata sul  *design*  del multi-threading: Design di applicazioni Multi-Threading       La trovo molto interessante perché si posso trarre idee semplici (una volta emerse si :) ) e efficaci per ridurre la durata/superfice di lock/sincronizzazioni disaccopiare le responsabilità ...

Siamo poi d'accordo su cos'è cattivo codice ?

Come ricordava un commento a un post precedente non basta elencare i difetti del codice per risolvere i problemi Per migliorare una code-base il primo passo è  quello di essere d'accordo su cos'è cattivo codice  su quali sono i difetti da rimuovere E' cosi facile?        Partecipa al sondaggio   cliccando qui E poi guarda i risultati (clicca qui) Ultimo aggiornamento: - su 10 dei punti siamo in accordo nel considerarli come cattivo codice - su 12 punti non c'è sufficente accordo  Tags :  Team Work | Pratiche | Team | Conflitto | Negoziazione | Disciplina | Progettazione Software |

Esempio di un Open Space riuscito (Domain Driven Development)

Guardando i video della recente UGIALT.NET conference mi ha colpito l'open space a mio avviso riuscito . Annoto alcune cose che ho osservato  •  gli argomenti discussi, i tempi e i modi gli decidono dalle persone che sono li intanto che la discussione va avanti, anche in base a quello che succede e a dubbi e interessi di ognuno     invece     di essere pre-stabilita  da  qualcun altro e condotta in modo unilaterale  •  la conversazione è fatta dalle conoscenze, dalle domande, dai dubbi e dalle singole esperienze pratiche concrete e reali del quotidiano lavorativo dei partecipante e le risposte che si...

Qual'è secondo te codice pessimo?

Quando apri un sorgente e ti viene da ... imprecare :) quando c'è un certo programma da modificare e quindi ... prendi ferie quando guadri lo schermo per ore senza capici niente ... e non sei nemmeno innamorato :)  ... cosa c'è in quel "codice" che ti fa  schifo  ribrezzo ? Tags :  Team Work | Pratiche | Team | Disciplina | Progettazione Software |

Scrum: un processo di sviluppo Empirico

Scrum e i metodi agili impiegano dei processi di sviluppo empirici (vedi su wikipedia) cioè che si adattano mentre il processo procede a seconda di quanto accade nel progetto Mentre i processi iterativi incrementali sono definiti nel senso che il processo segue per tutta la durata del progetto gli stessi passi pre-stabiliti e pre-definiti I processi empirici sono : Trasparenti : ogni cosa che ha qualche impatto sul buon esito del progetto devono essere facilmente accessibili e visibili per tutti  (es. i test che passano e quelli che no, la build che fallisce o quella che ha successo,...

Coding: migliorare lo stile

Il nostro lavoro é quello di programmare computer, la abilitá di scrivere del buon codice é spesso sottovalutata a favore della conoscenza delle tecnologie Un po come fanno gli sportivi e i musicisti il trucco é esercitarsi A Coding Dojo is a meeting where a bunch of coders get together to work on a programming challenge. They are there to have fun and to engage in DeliberatePractice in order to improve their skills: http://codingdojo.org/ Ho partecipato anche a una variante dove tutte le coppie in contemporanea scrivevano codice per poi discutere insieme le diverse soluzioni Update 14 AGO - ThePrimeFactorsKata - TheBowlingGameKata - Groovy Sales Tax Problem -...

Social networking prisma vs Antisocia NotWorking

Il prisma dei media sociali: http://www.briansolis.com/2008/08/introducing-conversation-prism.html Il progetto antisocial: http://project.arnolfini.org.uk/projects/2008/antisocial/ Segnalati da Bruce Strerling Colonna sonora: L'ombra della luce di Franco Battiato Tags :  Team Work | Complessità | Comunicazione | Creatività | Innovazione | Tools | Progettazione Software |

Come migliorare la qualità del codice giorno per giorno

Questo post di PierG dichiara una tra le cose più importanti che ho imparato in questi ultimi tre anni di lavoro: Quando il tuo software si è trasformato in un ammasso di codice legacy, rifarlo da zero probabilmente è la cosa peggiore. Infondo i problemi di quel codice sono comiciati quando il software è stato scritto da zero: perché dovrebbero andare meglio  riscrivendolo da capo ancora allo stesso modo ? In linea con una ipotesi che avevo condiviso qualche tempo fa: Il codice quando è Legacy lo è dal momento stesso in cui viene scritto Il punto è che scrivere...

Product Owner: abbraccia l'incertezza

E' una presentazione davvero bella. Da indicazioni al Product Owner su come esprimere i requisiti e ai membri del team su come raccoglierli/scomporli/ragrupparli al meglio per Produrre il maggior valore di business $$$ Trovare le soluzioni/funsionalità che meglio realizzano l'obiettivo di business Procedere in modo da chiarire sempre meglio quello di cui si ha bisogno Garantire le funzionalità indispensabili al business in...

Quali applicazioni/siti Web preferire ?

Richard Stallman si scaglia contro le applicazioni Web. Dal suo ragionamento nasce un suggerimento che trovo utile e importante :         Conviene verificare che l'applicazione Web permetta di esportare e copiare i propri dati meglio se in un formato standard importabile in altri siti/applicazioni prima di scegliere una applicazione Web per se e per la propria azienda       (ad esempio il Blog di Ugi permette di esportare i propri post nel formato standard BlogML e Google permette di scaricare la propria posta con un client POP standard e di fare il back-up) Perchè usare una applicazione Web...

Riconoscere una buona idea?

Stavo riflettendo che non è sempre facile Citare un autore, un "guru", una sua idea presa da un suo libro/articolo/post, magari a sostegno di una propria tesi,  si Poi quando lui è li presente, cita la stessa idea e giunge a conclusioni opposte, è ancora facile riconoscere che l'idea è buona? Credo sia meno facile Quando una buona idea differente dalla propria viene da un collega  è facile riconoscerla ? Difficile: accettare che la propria idea è meno buona,  credere che riconoscerla  è come cedere la vittoria, temere che possa far perdere la stima E quando finalmente si riconosce una persona come esperta, come...

Ci vuole troppo tempo, non si può fare!!!

      In un team Agile quando il capo progetto (coach) smette di dire    "questo non lo possiamo fare cosi perché non c'è tempo"    e sprona il team a scrivere codice di qualità accade una cosa ... almeno strana !?!?!? Capita di sentire un membro del team dire     "Questo non lo posso fare, ci vuole troppo tempo !!!"           L'ho osservato diciamo pure vissuto in almeno 3 team differenti, di diverse nazionalità, sia con una code-base ampia e legacy che in progetti completamente nuovi e in parte coperti da  test, sia in domini applicativi ampi e molto complessi che in...

Posta elettronica consegnata da vere lumache

      E' proprio da questo sito www.boredomresearch.net/rsm/  che prende il titolo il post precedente Ma gli androidi sognano anche lumache elettriche ? Tags :  | Creatività | Innovazione | Progettazione Software |

The end of an era - Windows 3.x

Estratto dall'articolo della BBC: The end of an era - Windows 3.x   Windows 3.x has come to the closing moments of its long life. On 1 November Microsoft stopped issuing licences for the software that made its debut in May 1990 in the US. The various versions of Windows 3.x (including 3.11) released in the early 1990s, were the first of Microsoft's graphical user interfaces to win huge worldwide success. They helped Microsoft establish itself and set the trend for how it makes its revenues, and what drives the company until the present day.  (continua) Tags :  Tools | ...

Ma gli androidi sognano anche lumache elettriche ?

If we can imagine it, there's a good chance it can be programmed Vint Cerf, Internet evangelist on the official Google blog E' chiamato       The Internet of Things       è un mondo, imminente, dove gli oggetti fisici e gli esseri umani insieme a spazi e informazioni virtuali interagiscono tra loro in tempo reale in uno spazio comune. In breve tutto è interconnesso E' la realizzazione del neologismo coniato da Bruce Sterling nel 2004        spime       cioè oggetti che possono identificarsi in base alla propria posizione e al tempo.  Ad esempio possono localizzarsi col GPS e...

Disaccoppiamento, inversione delle dipendenze e architetture esagonali

Segnalo questo post che parla del PatternMediator con gli steroidi sino a diventare architettura applicativa: Disaccoppiamento, inversione delle dipendenze e architetture esagonali Tags :  | Agile | Progettazione Software |

Disegno versus Produzione 3/3 conclusioni

       Nel disegno si fanno emergere varie alternative possibili che vengono analizzate e esplorate in un processo iterativo fatto di prove e tentativi che migliorano via via la comprensione del problema e della soluzione sino alla definizione del disegno prescelto (vedi ad esempio Modificare metodi interminabili: strategia).        Il primo passo per l'efficenza è distinguere le (re)iterazioni di disegno che in questo modo generano valore dalle (re)iterazioni di produzione che invece sono un "rework" cioè rifare il lavoro che è uno spreco (l'esempio in questo commento)        Il secondo passo per l'efficenza è riuscire a distinguere anche tra le (re)iterazioni di...

Disegno versus Produzione 2/3

       _P_ er realizzare software le attività di disegno e produzione si combinano insieme. Trovo che sia molto facile confondere quello che è disegno da quello che è produzione e molte sviste sul disegno credo che nascono proprio da questo.    Riporto le distinzioni che ho trovato in questo articolo  POSITIVE VS NEGATIVE ITERATION IN DESIGN, G Ballard che propone dei criteri per distinguere vantaggi e sprechi nel disegno e nella produzione.         Il disegno agisce nel mondo del pensiero e della immaginazione per "creare una ricetta"  (strutturare un sw in namespace, in classi, in livelli, etc.),  la...

Disegno versus Produzione 1/3

       _P_ er realizzare software le attività di disegno e produzione si combinano insieme. Trovo che sia molto facile confondere quello che è disegno da quello che è produzione e molte sviste sul disegno credo che nascono proprio da questo.    Designare una applicazione è simile in un certo senso a fare una buona chiacchierata che lascia tutti con una visione più chiara delle cose.  Ci si confronta su più alternative possibili di design, si prendono le idee migliori da ogni alternativa, si verifica la fattibilità e si fanno stime migliori.    Quando invece è simile a uno scontro, le alternative...

Arte Generativa e software-art

C.STEAM 2008, a Torino la mostra dal 19 al 27 settembre l'intersezione tra design e informatica Tags :  Team Work | Creatività | Innovazione | Progettazione Software |

Hoare sul disegno del software

Tony Hoare è conosciuto per aver inventato l'algoritmo QuickSort e per i suoi contributi alla programmazione concorrente, su molti  libri sono citati i Monitor di Hoare. Sono rimasto sorpreso di scoprire che questo bel pezzo di antiquariato :D - cioè questo arzillo vecchietto - è ancora vivo e vegeto ed è Senior Researcher alla  Microsoft Research in Cambridge Ecco una citazione di Hoare sul del disegno del software There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there...

Codice con le rughe - 3/4 (e resto mancia)

Quand'è che un programmatore considera un codice sorgente "Legacy" ??? Quando e come quel codice è diventato Legacy ??? Visti i link, letti i commenti, l'idea che mi convince sempre di più è questa. Visto che non è una tecnologia superata a rendere un codice Legacy - visto che non è il fatto che il codice non è documentato e nessuno sa più cosa fa come e perché a renderlo Legacy  - visto che non è il tempo che passa e non è l'uso che lo consuma a renderlo Legacy - vista la difficoltà di leggere il codice rispetto la facilità a...

Codice con le rughe - 2/4

Quand'è che un programmatore considera un codice sorgente "Legacy" ??? Quando e come quel codice è diventato Legacy ??? Letti i commenti al post precedente faccio alcune riflessioni:    - L'idea che il codice diventa legacy perchè impiega tecnologie superate funziona poco.  Il codice sorgente di Sw di successo resta in onorato servizio diversi anni dopo la comparsa di nuove tecnologie alternative. Ad esempio Don Box disse 'mscoree is the last COM DLL' - chi fa software in ambiente Enterprise sa invece quanto è ancora indispensabile l'interoperabilità con COM perché il codice in questa tecnologia è ancora presente e vivo.     -...

Codice con le rughe - 1/4

Il software ha due caratteristiche davvero singolari che non ci sono negli oggetti comuni di tutti i giorni e nella maggior parte dei prodotti industriali. William Gibson in Mona Lisa overdrive sembra conoscerle bene, è così che Angie, 3Jane e Continuity realizzano il sogno della Tessier-Ashpool di raggiungere l'immortalità nella matrice. Il software per quanto viene utilizzato (compilato o eseguito) non si usura ne si consuma -  e  - col passare del tempo non invecchia ne deperisce. Allora cos'è che fa diventare il codice sorgente Legacy  ???   quand'è che un programmatore considera un codice sorgente "Legacy" ??? Update E quindi _quando_ e _come_ quel...

Web Service: Mobile Agent + servizi + risorse

Aggiorno e dettaglio un idea che avevo già accennato sulla progettazione di Web Service e di applicazioni che li utilizzano. Un Web Service può fornire un servizio: un risultato finito e fruibile come l'esito della ricerca delle citazioni di un dato articolo tra i libri di una banca dati, o l'invio automatica di un allarme fatto dal sistema di controllo della cella frigo quando la temperatura sale oltre la soglia di congelamento. una risorsa: la copia digitale di un dato in...

Modificare metodi interminabili: strategia

Il modo naturale di procedere per scomporre metodi troppo lunghi?     procedere per tentativi facendo passi in avanti e ogni tanto passe indietro: ad ogni tentativo il disegno originale apparirà più chiariro e cosi il modo di procedere. Ad esempio tovato un grande if o switch si può cominciare a estrarre in metodi i corpi degli if e in funzioni le espressioni condizionali  oppure estrarre insieme nello stesso metodo la condizione insieme al corpo del if. La prima strada può evidenziare corpi di if uguali richiamati in diversi punti del metodo, la seconda può evidenziare if interi ripetuti. Provare aiuta ad avvicinarsi...

Modificare metodi interminabili: quando il tool di Refactoring manca

Quando è necessario modificare un metodo lungo centinaia o migliaia di righe di codice e modificare un comportamento esistente senza l'aiuto di un tool di refactoring conviene   SCOMPORRE IL METODO ABNORME E METTERLO SOTTO TEST   applicando delle tecniche specifiche. Visto che è difficile scrivere dei test sul quel metodo, allora si inserisce il test dentro il metodo. L'idea consiste nel inserire delle variabili di rilevazione nel codice del metodo che "misurano" se si è comportato correttamente e queste variabili vanno a testare le stesse cose che si testerebbero se si potessero scrivere test unitari sul metodo abnorme.  La prima è...

Modificare metodi interminabili: scomporli

Quando è necessario modificare un metodo lungo centinaia o migliaia di righe di codice e modificare un comportamento esistente conviene   SCOMPORRE IL METODO ABNORME E METTERLO SOTTO TEST   con l'aiuto di un tool di refactoring come Resharper.  La strategia è quella di separare la logica dalle intricate dipendenze nel codice e quindi sradicare le dipendenze (ad esempio sostituendo i riferimenti a classi concreti  con riferimenti a interfacce) per semplificare il test del codice. Il metodo non è già coperto da test e quindi è necessario cominciare applicando solo i refactoring previsti dal tool (principalmente RefactoringExtractMethod e RefactoringRenameMethod) evitando refactoring manuali che non sono sicuri senza ne test...

Modificare metodi troppo lunghi

Sto parlando di modificare un metodo lungo centinaia o migliaia di righe di codice non coperte da test.   Quando la modifica è   UNA NUOVA FUNZIONALITA' DA AGGIUNGERE   cioè che non modifica comportamenti esistenti il punto è quello di non peggiorare ancora la lunghezza del metodo e di testare almeno la nuova funzionalità che si implementa. L'idea è implementare la nuova funzionalità in un altro metodo e di richiamarlo dal metodo già troppo lungo.  In questo modo il metodo originale si allunga solo di una riga. Per rendere testabile il nuovo metodo serve renderlo indipendente dal contesto passandogli le informazioni che gli servono come parametri. Questo pattern si chiama...

Single-goal Editing

Ecco un'altra cosa che richiede disciplina e faccio fatica a seguire - ma non mi arrendo : fare una cosa alla volta quando si scrive codice Per esempio devo modificare un metodo di un oggetto perché accetti un enum con 3 valori invece del booleano che ha ora per poter gestire una nuova casistica: Inizio la vodifica e mi accorgo che sul form c'è da sostituire il check-box con 3 option button quindi interrompo la modifica del metodo e vado sul form. Sistemato il form torno al metodo, proseguo con la modifica quando mi accorgo che ci sono 3 if che...

La qualità del codice che fa la differenza nella pratica

Lavoro nel team di cui faccio parte da quasi 3 anni.  Un tempo in cui lo stile di programmazione nel team si è evoluto migliorandosi. Cosi quando c'è uno sviluppo da fare mi trovo a lavorare di volta in volta su codice di qualità differenti, questo mi ha permesso di vedere in pratica le diverse caratteristiche di qualità del codice e gli impatti che hanno sul mio lavoro: tempi, affidabilità, risultato finale. In generale percepisco 4 diversi livelli crescenti di qualità del codice: Facilità di trovare dove fare la modifica Dipende...

Strategie per togliere duplicazioni nel codice

Rimuovere le duplicazioni nel codice raramente è una sequenza lineare di passi in avanti. Ci sono modi diversi di scegliere da quali duplicazioni cominciare, modi diversi di eliminare ogni duplicazione, e durante ogni eliminazione si possono evidenziare nuove duplicazioni.    Qual è il modo naturale di procedere per rimuovere il codice duplicato?  Il modo naturale è di procedere per tentativi facendo passi in avanti e ogni tanto passi indietro: ad ogni tentativo il disegno originale apparirà più chiaro e cosi il modo di procedere. Questo è un punto in cui Team System ha una carenza. Infatti ci sono CVS che permettono di fare check-in locali e...

Eliminare il codice duplicato: la scelta non è meccanica

  Scelta la duplicazione da rimuovere e i refactoring da usare capita anche che ci sono più alternative per rimuoverla e quindi bisogna   scegliere il modo di rimuovere la duplicazione  .  Per fare un esempio, il metodo   void C { a(); a(); X(); a(); X(); X(); }  può essere  trasformato in         void C { aa(); X(); a(); XX(); } oppure in        void C { a(); aX(); aX(); X(); } In questo caso nel cercare un nome per il metodo ottenuto in un modo (nel esempio un nome per aa() e XX()) e quello ottenuto nell'altro (nel esempio u nnome per aX())  scegliere quello col nome che ha più senso aiuta a fare la scelta giusta. Un altro criterio...

Eliminare il codice duplicato: i refactoring

E' arrivato il momento di     raccogliere il fattore comune     del codice duplicato e unificarlo in un solo punto eliminando cosi le duplicazioni. Annoto alcune indicazioni da  Working Effectively with legacy code di M.C.Feathers .        Quando la duplicazione riguarda una porzione di codice o una parte di una espressione dentro un metodo si applica il RefactoringExtractMethod.        Quando la parte duplicata è una espressione, ad esempio una espressione condizionale applica il RefactoringDecomposeConditional .               Quando la parte duplicata è un metodo intero e relative variabili di classe si applica il RefactoringExtractSuperclass.                   Quando la duplicazione riguarda buona parte di un metodo a meno di piccole differenze, si applica...

Eliminare il codice duplicato: da dove cominciare

Trovate le duplicazioni il passo seguente è    scegliere quale duplicazione rimuovere per prima   :  in basa alla scelta fatta il risultato finale, il codice e la sua struttura, saranno diversi.  L'esperienza insegna di cominciare dalla duplicazione più piccola perché una volta rimossa emergeranno nuove informazioni e nuove duplicazioni cominceranno ad essere più evidenti.   Riferimenti: Working Effectively with legacy code di M.C.Feathers   Tags :  Team Work | Agile | Pratiche | Progettazione Software |

Eliminare il codice duplicato

Il primo passo è quello di   riconoscere il codice duplicato  .  Quando il codice è il cut-and-paste di un altro codice o di un metodo è abbastanza immediato riconoscerlo. Altre volte le duplicazioni sono piccole parti di codice riscritto uguale (una riga di codice o una parte di una espressione) in molti posti. Ci sono anche delle sequenze di codice che si ripetono con lo stesso ordine e a volte in ordine differente o interi metodi che differiscono per piccoli dettagli (vedi Refactoring e il CatalogoDelleCodeSmell). Questi casi di codice duplicato si trovano cercando a vista con pazienza e facendo esperienza. Un altro approccio reattivo cioè quello di...

Individuare le responsabilità di una classe

Quando capita di trovarsi con una classe troppo grossa (con 20-60 di metodi) probabilmente li ci sono troppe responsabilità, conviene individuarle e poi estrarle mettendole in nuove classi Ecco alcuni modi di individuare le responsabilità a partire dal codice esistente di una classe: Scrivi i nomi di tutti i metodi della classe insieme alla visibilità (public, privare, friend, internal, ...) e prova a raggrtupparli in base alle similitudini nel nome Guarda i metodi privati, internal e protected. Quando sono molti probabilmente li c'è una classe nella classe.  Una classe...

Disegno del codice che usa Framework e librerie di 3ze parti

 Sun per Java  e  Microsoft per .NET  hanno un framework esteso che soddisfa molte delle esigenze comuni nello sviluppo di software. E ci sono anche varie  librerie di 3ze parti  che capita di usare nelle proprie applicazioni. Questo può portare a realizzare codice composto da una sequenza di chiamate a librerie / framework, difficile da testare e difficile da capire.  In passato mi è capitato di scrivere codice in questo modo e di trovare codice fatto cosi  e non è stato facile lavorarci. L'altro svantaggio è la dipendenza inestricabile che si crea con il framework o la libreria. E questo ha un impatto economico e strategico...

Materiale dal ESSAP 2008

  Il materiale della 3rd European Summer School on Agile Programming riguardo Agile Loop , i Mini-Project, la sessioni sui Test di accettazione, un report dal campo sulla adizione dei metodi agili in azienda e la stima e pianificazione è qui: http://essap.dicom.uninsubria.it/pmwiki.php?n=Main.CourseMaterials Altro materiale sugli Agile Loops: http://www.xpday.net/Xpday2007/session/XpLoops.html La tecnica del pomodoro: http://www.tecnicadelpomodoro.it/tdp.html Il materiale relativo al Leadership game: http://www.paircoaching.net/docs/LeadershipGame.pdf     Tags :  Team Work | Agile | Pratiche | Leadership | Team | Team building | Progettazione Software |

Milioni di cose ancora da scoprire x scrivere buon codice

  proprio quando credevo di aver  imparato   tutto quello che c'è da sapere sulla programmazione scrivere proprio codice intendo, scopro che ce nè altrettanto ancora da imparare !!! un po come migliorare il tempo del giro in go-kart, per passare da 50'' a 48'' ce n'è da fare, provare, capire, imparare, forse  piu di quello che è servito per passare dai 60'' ai 50'' (oh, nella gara di go-kart  tra colleghi sono pure arrivato ultimo)! è che arrivato ai 50'' per abbassare ancora di 2'' al primo momento pare che sia questione di dettagli infinitesimali, tutta roba da   perfezionismo maniacale e talento naturale....

Allenarsi per un anno solo al calcio d'inizio

Se la nazionale italiana di Rugby spendesse l'intero anno che la separa al prossimo torneo delle 6 nazioni per allenarsi al calcio d'inizio suonerebbe strano! Trovo che nel mondo virtuale e intangibile del software una stranezza simile non risulta altrettanto evidente. Il disegno del codice e l'architettura di una applicazione ad esempio. I libri, i siti, le discussioni sui forum, i corsi, parlano principalmente di come realizzare una architettura iniziale, di che disegno dare al codice quando si scrive. Quando un software ha successo dura anche 5 o 10 anni. Nei quali vengono corretti i bug, aggiunte nuove funzionalità e  quelle esistenti vengono adattate al mondo che cambia...

Parmenide, Eraclito e von Neumann

Leggendo questa citazione di von Neumann ho ricordato quella di Parmenide e Eraclito   « Non ci si può bagnare due volte nello stesso fiume, perché né l'uomo né le acque del fiume sono gli stessi »  (Eraclito, Battiato)     « E neppure è divisibile, perché tutto intero è uguale; ... Perciò è tutto intero continuo: l'essere, infatti, si stringe con l'essere ... Ma immobile, nei limiti dei grandi legami ... E rimanendo identico e nell'identico » (Parmenide, Monismo, Uno)   « Non c'è motivo di essere precisi riguardo a qualcosa quando non conosci quello di cui stai parlando  » (von Neumann)   Tags :  Team Work | Agile | Progettazione Software |

Arte e informatica ancora

  Ho visto questo concorso per realizzazioni artistiche che dimostrano comportamenti emergenti, che si evolvono nel tempo, reagiscono all'ambiente in cui sono immerse e sembrano avere una vita propria ... arti-ficiale Il concorso riguarda l'arte e le tecnologie di vita artifiviale insieme alle discipline collegate come robotica, intelligenza artificiale, biologia e la ricerca delle caratteristiche sintetiche della vita moderna     Il link al concorso , e alla fonte   Tags :  Agile | Complessità | Creatività | Innovazione | Progettazione Software |

Informatica & Design

    L'incontro tra medicina e informatica ha portato in dono all'informatica il metodo scientifico empirico tipico delle scienze naturali e sociali (vedi Empirismo) da cui ad esempio i metodi Agili.   L'incontro tra psicologia cognitiva e informatica ha donato all'informatica la centralità dell'uomo da cui ad esempio la Human-Computer Interaction, il Computer Supported Cooperative Work (vedi CSCW) e e il social networking. Oltre naturalmente ancora i metodi Agili.   Un incontro che sta portanto nuovi doni è quello tra arte, design e informatica. Se ne è accorta anche Microsoft:                   Microsoft Researchers at Intersection of Science and Art  che ha partecipato pure lei all'esposizione   Design and...

ESSAP 2008: Una settimana di training Agile full-immersion

  Questo venerdì ho completato una settimana molto intensa e fruttuosa di formazione sulle metodologie Agili alla 3rd European Summer School on Agile Programming o più brevemente ESSAP 2008. Hanno partecipato studendi universitari e dottorandi di tutta europa (Italia, Austria, Belgio, Olanda, Bulgaria) e oltre (Pakistan, Canada e Argentina) e professionisti esperti ( io sono tra questi ;-) ). Hanno partecipato come tutor e speaker gli organizzatori dalla Università dell'Insurbia tra cui Matteo Vaccari  Federico Gobbo e Vieri del Bianco, alcuni professionisti e consulenti che già impiegano i metodi agili (per es. in ThoughtWorks e in Funambol) e Coach con esperienza internazionale di insegnamento e utilizzo dei metodi agili su gradi progetti e per...

DryadLINQ data parallel applications (spocchia da developer ?)

  Un altro progetto molto interessante di Microsoft Research, DryadLINQ : Dryad provides reliable, distributed computing on thousands of servers for large-scale data parallel applications. LINQ enables developers to write and debug their applications in a SQL-like query language, relying on the entire .NET library and using Visual Studio.   Questa frase mi è sembrata un po' spocchiosa come se la semplicità non fosse un valore, o ho frainteso ? The goal of DryadLINQ is to make distributed computing on large compute cluster simple enough for ordinary programmers.   Stiamo parlando di programmazione parallela a Single instruction stream, Multiple data stream su sistemi distribuiti. Cioè secondo...

Un progetto Microsoft Research sul multi-threading

  Il progetto di Microsoft Research si pone l'obiettivo di realizzare una libreria per supportare un modello di programmazione chiaro e consistente per l'accesso concorrente a risorse condivise tra 2 e più thread. Il progetto si chiama C# Software Transactional Memory (SXM), alcune estratti dalla descrizione: The SXM is a software transactional memory package written in C#... Threads synchronize by means of memory transactions, short-lived computations that either commit (take effect) or abort (have no effect)... - - - Un altro progetto di Microsoft Research sempre sulla programmazione multi-threading  è AME: Automatic Mutual Exclusion, dalla descrizione sembra quasi un approccio di baby-sitting del developer. Ecco alcuni estratti della descrizione:...

Due definizioni equivalenti di buon disegno

  Flessibile riesco a fare una modifica intervenendo localmente in parti isolate del codice Robusto faccio una modifica del codice e questa incide solo sulle parti strettamente/logicamente correlate del programma Riusabile riesco facilmente ad estrarre dal codice le funzionalità per riutilizzarle Basso accoppiamento: la dipendenza dei componenti software del sistema da altri componenti software del sistema è bassa Alta coesione: i componenti software del sistema possono collaborare tra di loro in svariate combinazioni per ottenere nuove funzionalità .     Tags :  Progettazione Software |

Situazioni da team: disaccordo sulla architettura

Per lo sviluppo di una funzionalità gli altri membri del team concordano su una soluzione architetturale che detesti, cosa fai ?  Update 17/06/2008: idee dai commenti cercherei di capire perchè il team stia facendo quella scelta e perchè la trovino più adatta a quella che farei io Dopodiche calcolo a spanne il guadagno che la mia soluzione avrebbe rispetto a quella proposta e valuto di conseguenza se vale la pena portare altri argomenti alla discussione o se non convenga lasciare perdere ...

Ma Turing che c'entra con la progettazione di applicazioni multi-threading?

  Oltre alle già affascinanti conseguenze del teorema di teminazione di Turing , alcune di queste riguardano direttamente la programmazione multi-threading. Dal teorema di terminazione deriva che non esiste un programma/tool/macchina capace di analizzare del codice e riuscire sempre e comunque a indicare se si bloccherà per deadlock oppure no.   Certo esistono tool che analizzano staticamente il codice e riescono a tracciare il grafo di allocazione delle risorse evidenziando i circuiti sul grafo, ma nulla il tool può dire se ci sono le condizioni o meno perchè a run-time questi circuiti potenziali possano accadere e causare un deadlock o meno. Diavolo di un Turing!   Tags...

Programmi più intelligenti del proprio programmatore ?

  Sembra di no, che non sia possibile.        Anche nei vecchi film di fantascenza si trovano robot, androidi, programmi di intelligenza artificiale o "semplici" programmi degli scacchi che riescono a essere intelligenti quanto il loro geniale programmatore e non di più Anche dall'esperienza professionale quotidiana sembra che no. E alpiù sarebbe dannoso. Il lavoro del programmatore è creare del codice che si comporta esattamente e solo in modo aspettato e cioè che corrisponde alle specifiche date. Qualsiasi differenza è ... un bug. E la sua professionalità consiste nella abilità di addomesticare il codice alla prevedibilità.   Dall'informatica si sa invece che : il comportamento di un computer/programma non è _in_generale_...

SOA + ROA + Mobile Agent = ?

La Service Oriented Architecture si poggia sulla facilità per un sw di inviare la richiesta di un servizio a un sw su un sistema autonomo e remoto. E ricevere pure la risposta! La Resource Oriented Architecture si poggia sulla facilità di accedere a risorse distribuite e ottenerne in locale la copia fedele che il sw può elaborare. Ma cosa fare quando le risorse sono anche sparse, ingombranti da trasmettere e lontane da chi esegue il sw ? Fanno il loro ingresso i Mobile Agent, sw che possono migrare da un nodo all'altro della rete e fare una elaborazione accedendo anche ai dati...

Programmazione OO, una definizione alternativa

  La definizione di programmazione Object Oriented più diffusa è quella che si poggia su polimorfismo, ereditarietà e incapsulamento. Ha quel che di misterioso e intangibile che mi ha sempre affascinato e incuriosito. Esiste anche un modo alternativo di definire programmazione Object Oriented che ha il fascino della praticità e del quotidiano   ed è la somma di tre stili di programmazione.  Il primo è lo stile di programmazione modulare (conosciuto anche come principio di data hiding) in base al quale una struttura data e le procedure che la elaborano (stato e comportamento) formano un modulo dentro cui restano nascosti i dettagli implementativi.  (vedi sul wiki) Il secondo è lo stile...

Progettazione di app. multi-threading: conclusioni

  Sviluppare applicazioni che leggono, scrivono, interrogano e modificano un database in modo concorrente è enormemente più facile che scrivere applicazioni multi-threading eppure le similitudini tra questo tipo di  applicazioni sono più delle differenze I libri, gli articoli e gli esempi di codice reperibili   si focalizzano   sui modi di implementare le primitive di locking e sincronizzazione tra hw, sistema operativo, framework e linguaggio, sulla correttezza di un meccanismo di locking o su come scrivere correttamente un algoritmo concorrente. In questa serie di post invece ho raccolto un repertorio di idee e riferimenti a beneficio della fantasia di chi progetta applicazioni multi-threading più semplici da capire ed...

Progettazione di app. multi-threading: pattern per il modello a sincronizzazione

Il modello a sicronizzazione è più semplice da disegnare, è sufficente individuare la terna  produttore, consumatore e risorsa e renderla evidente nel disegno.     La terna Produttore, consumatore e buffer  Il produtore e il consumatore possono ad esempio venire marcati con una interfaccia (es. IProducer e IConsumer) lo stesso vale per la risorsa che concettualmente si presta bene a essere considerata un buffer (es IBuffer). Il buffer segue comunemente il pattern del buffer circolare: http://c2.com/cgi/wiki?CircularBuffer mentre la sincronizzazione tra produttore e consumatore può avvenire secondo il disegno per pattern Observer o detto anche Publisher-Subscribers : http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/PatternObserver.html Anche quando il buffer non c'è perché l'elemento...

Progettazione di app. multi-threading: reagire al deadlock

  + Accorgersi del Deadlock Come accorgersi quando un deadlock è in corso ? Mantenere il grafo di allocazione dei lock sulle istanze man mano che vengono acquisiti a run-time e cercare cicli nel grafo è una possibilità ... che non viene quasi mai utilizzata. Quasi sempre si preferisce imporre un time-out nella acquisizione del lock a un'istanza. Quando scatta il time-out probabilmente è un deadlock. Ad esempio anche il Db Oracle fa cosi. L'istruzione per acquisire un lock con timeout in .NET è Monitor.TryEnter(istanza, timeout)   + Scegliere il time-out Se è troppo breve potrebbe scattare il timeout a causa di una operazione un po più lunga del...

Progettazione di app. multi-threading: prevenire il deadlock

L'obiettivo è quello di far emergere dal disegno in modo evidente la politica di gestione dello stallo che si  vuole seguire e aiutare ad applicarlo in modo consistente in tutta la applicazione. Elenco qui un repertorio di pattern che trovo utili quando si implementa la strategia di prevenzione del deadlock [1].  Ordered Lock  Quando l'esecuzione di un metodo e la sequenza che segue di chiamate ad altri metodi richiede di acquisire più lock insieme, si previene il deadlock acquisendo sempre i lock con ordine dato (per esempio i lock su istanze della classe ServerListener vanno fatti sempre prima di quelli sulla classe ConnectedClient che...

Progettazione di app. multi-threading - altri pattern comuni

Proseguo col repertorio di possibili opzioni per la progettazione di applicazioni multi-threading, da quelle comuni a entrambi i  modelli a competizione e a sincronizzazione. Quelli che hanno lo scopo di ridurre il tempo di lock di una istanza condivisa (= attraversata da più thread = i cui metodi sono richiamati da più thread) o la durata del rendezvous per una sincronizzazione tra produttore e consumatore.    Optimistick Locking L'idea è la medesima di quella usata con i db, cioè quella di fare le elaborazioni e i calcoli lunghi prima ancora di mettere i lock o avviare il rendezvous per poi poter essere velocissimi dovendo solo...

Progettazione di applicazioni multi-threading - pattern comuni

      Comincio col repertorio di possibili opzioni per la progettazione di applicazioni multi-threading, da quelle comuni a entrambi i  modelli a competizione e a sincronizzazione.    Active Objects  pattern   Lo scopo è riconoscere quanti thread ci sono in una applicazione, distinguere i compiti di un thread da quelli di un altro e identificare come quando e chi crea nuovi thread. L'esecuzione di un nuovo thread ha inizio in active object.  Le istanze di active object sono in relazione 1 a 1 con i thread. A un thread con un compito (per esempio quello restare in ascolto delle richieste di connessone di un client) cnrrisponde una classe di active object, a...

Resurce Oriented Architecture: il contratto

  Segnalo il post http://blogs.ugidotnet.org/PierreGreborio/Default.aspx   Tags :  | Progettazione Software |

Resource Oriented Architecture

Segnalo questo post molto interessante su Resource Oriented Architecture di Pierre Greborio che affianca al SOA un nuovo concetto architetturale: http://blogs.ugidotnet.org/PierreGreborio/archive/2008/05/10/92606.aspx Altri 2 link che mi hanno aiutato a capire: http://en.wikipedia.org/wiki/Representational_State_Transfer e http://en.wikipedia.org/wiki/Resource_oriented_architecture   Tags :  | Progettazione Software |

Progettazione di app. multi-threading: modelli di programmazione

  Esiste una terza         metafora in base alla quale impostare il modello di programmazione        per la gestione della concorrenza: Il modello a monitor lo scopo di questo modello è sollevare il programmatore delle complessità legate alla gestione della concorrenza che invece viene lasciata al compilatore e al sistema che eseguirà il codice. 2 esempi noti sono il Single Thread Apartment del Visual Basic 6 e le Activity dei componenti COM+. Ma anche il Syncronize del Java e il MethodImplOptions.Synchronized di .NET.   Il modello...

Progettazione di app. multi-threading: modelli di programmazione

            La successiva scelta di progettazione da fare è su     la metafora in base alla quale impostare il modello di programmazione      per la gestione della concorrenza. Sono due le metafore più comuni, la prima è          il modello a sincronizzazione           in cui due (e più) istanze su due differenti thread si scambiano messaggi per coordinarsi nel fare i compiti/operazioni/calcoli necessari all'applicazione. Mentre l'altra è          il modello a competizione          in cui due (e più) istanze su due differenti thread competono per usare in modo esclusivo un'istanza che è in esecuzione su entrambi i thread (*). ...

Progettazione di app. multi-threading: obiettivi

 L a progettazione comincia con la scelta di un modello di programmazione della applicazione multi-threading da queste 2 cose: In che modo il disegno renderà riconoscibili gli oggetti che vengono eseguiti su/attraversati da più thread e avranno bisogno di una gestione della concorrenza? Una nota tecnica utile, la gestione della concorrenza serve quando thread diversi scrivono sullo stesso  field della classe oppure uno ci scrive e un altro ci legge. Queste sono chiamate le condizioni di Bernstein [1] Quale politica...

Progettazione di applicazioni multi-threading

  L'obiettivo di progettare una applicazione multi-threading - oltre a garantire che funzioni correttamente - è di scriverla in modo comprensibile e che aiuta a modificarla e evolverla con tempi e sforzi sostenibili.  Facendo manutenzione e evolvendo l'applicazione mi troverò ad esempio a cercare risposta a domande come queste, e vorrò riuscire a farlo senza bisogno di sacrifici eroici : Sto aggiungendo una nuova classe all'applicazione, quanti thread avranno accesso contemporaneo all'istanza della classe? Sto modificando il metodo di una classe per aggiungergli chiamate a metodi di altre classi, dovrò aggiungere dei lock ? quali e dove ? ...

Mescolare bene esperienza e capacità di imparare facendo

  I veloci cambiamenti del mercato e della concorrenza, i cicli di vita ridotti dei nuovi prodotti e la velocità con cui emergono nuove tecnologie evidenzia ogni giorno l'importanza di saper reagire e adattarsi in fretta - e questo si riflette anche nei software      Per molte sfide cioè reagire e adattarsi è indispensabile perché non è possibile prepararsi in anticipo ad affrontare eventi non prevedibili o totalmente nuovi e sconosciuti.    Altre sfide riguardano domini/tecnologie/etc  talmente nuove e anche se conosciute di esperti reperibili in tempo non ce n'è.    E ci sono sfide che affrontano eventi conosciuti e solo in parte prevedibili, preparasi a tutte le possibili...

Elastic Mind la sfida del Design

                 ... , and to help people  deal with change . Designers have coped with these displacements by contributing thoughtful concepts that can provide guidance and ease as science and technology evolve. Fonte: The Museum of Modern Art Mi pare che l'informatica non sia più sola ad affrontare la sfida della complessita, per chi non è di passaggio a NY qui il link alla mostra on-line : http://www.moma.org/exhibitions/2008/elasticmind  Tags :  Complessità | Creatività | Innovazione |  Progettazione Software |

Strong-Typing o Weak-Typing?

Simboli tangibili del Weak-Typing sono ad esempio: i Variant del VB6 gli object che compaiono tra i parametri dei metodi Equal, CompareTo, Add, Remove e Item del .NET 1.x ma anche i linguaggi di scripting interpretati come ASP. Le ragioni per sfruttare il Weak-Typing sono: aumentare il riutilizzo del codice aumentare la generalità di una procedura rimandare al più tardi possibile (a run-time anche dopo il deploy-time) la conoscenza del tipo specifico di un oggetto che un metodo riceverà in ingresso come...

Esperienza di Refactoring con ReSharper: resoconto

Clicca il titolo per leggere tutta la storia. Sono molto interessato a conoscere i commenti di altri utenti di ReSharper, di utenti di altri tool di Refactoring x .NET e anche dei tool di Java.

I namespace Alias sono utili?

Gli alias di namespace gli definisco nel codice così using sysDat = System.Data; using sysSql = System.Data.SqlClient; using sysXmlSrl = System.Xml.Serialization; using sysRtmSrl = System.Runtime.Serialization; e quindi per indicare il tipo DataRow scrivo sysDat.DataRow. Se invece nel codice scrivo using System.Data;  posso anche dimenticarmi che esiste il namespace System.Data e per indicare il tipo DataRow scrivo DataRow e basta.   Quando disegno il codice (sia up-front che col refactoring) uso i namespace per organizzare i tipi (classi, enum, etc.) raggruppando quelli logicamente correlati (un EventArgs insieme al suo evento, il tipo Spedizione insieme all'enum TipoSpedizione, etc.) [1]. Quando poi dichiaro, istanzio o referenzio quei tipi, il namespace in cui sono...

Quiz di programmazione OO

Quiz di programmazione: quanto bene conosci OOP? Cosa distingue più di tutto la programmazione OO dagli altri stili di programmazione? Quali strumenti tipicamente mettono a disposizione i linguaggi OO come C# e VB.NET (namespace, classi, costruttori, ...) e che funzione hanno? Cos'è una relazione di ereditarietà e che caratteristiche ha? Cos'è una gerarchia di classi? Che differenza c'è tra ereditarietà singola e multipla? Quando usare l'ereditarietà per creare diverse classi con parti comuni e quando invece usare un flag in...

I Generics del C# 2.0 e i Template del C++ ISO/IEC 14882

Confronto tra i Generics del C# 2.0 e i Template del C++ ISO/IEC 14882:   Generics C# 2.0 ...

I Generics del C# 2.0: quando sono preferibili alternative diverse?

Mi accodo ai precedenti blog sul tema: Le novità di C# 2.0 di Emanuele Del Bono Ancora sui Generics di Emanuele Del Bono Generics C# 2.0: termini mio Quando sono preferibili... alternative diverse?   Algoritmi generici Poco supportata e molto difficoltosa  la scrittura e l'utilizzo di algoritmi generici a causa delle limitazione dei generics del C#2.0(1). Per la realizzazione di algoritmi generici è più pratico ed efficace utilizzare la programmazione generativa, vedi il tool CodeSmith. Per questo nel Framework ad...

SOA... parliamone ;-)

Service-Oriented Architecture, avendo ricevuto un valido suggerimento ho lanciato il sasso SOA sullo stagno Wiki (esattamente qui: ServiceOrientedArchitecture). La discussione è aperta sulla scelta degli argomenti da trattare e su come strutturare i contenuti, ma chi ha già contenuti da inserire può naturalmente farlo. So che questo tema interessa molto a Pierre Greborio e che è ferrato sull'argomento, spero voglia dire la sua! Tags :  Progettazione Software |

OOP

ProgrammazioneOO Il tema della OOP sul wiki ha raccolto quasi tutti gli argomenti principali, manca da descrivere le gerarchie di oggetti e le gerarchie di classi e la relazione di ereditarietà. Chi ha il desiderio di trattare questi temi è il benvenuto. Messo questo mattone si aprono le discussioni sul DisegnoOO, (dai pattern agli antipattern passando per i principi del disegno senza dimenticare il refactoring) e anche qui per cominciare basta dire la propria opinione sui temi più interessanti ed il modo di organizzarli. Anche sulla programmazione .NET c'è un tema molto interessante che è la scrittura di codice sicuro, argomento di grande interesse che con il...

Test: programmazione OO e gli altri 7 paradigmi

  Oltre alla programmazione OO, nell'informatica moderna ci sono (almeno) altri 7 paradigmi di programmazione. Quanti paradigmi conosci? Cosa distingue veramente la programmazione OO dagli altri paradigmi? Cosa hanno a che fare questi paradigmi con .NET? La risposta la trovi qui. P.S. Se vuoi discutere, controbattere, commentare, contribuire, fare domande, scrivere esempi di codice sui vari paradigmi, puoi scrivere direttamente sulle pagine del Wiki .NET. Tags :  Progettazione Software |

Refactoring Applied

   Sono online slide ed esempio della sessione!  Tags :  Progettazione Software |  

Alcune foto del Workshop 2 Dic, Microsoft Italia - Segrate

    Provocato da Roberto Messora, ecco le foto dell'evento che ho raccolto:                       Cliccare per vederle intere "as ususal".   Tags :  Eventi | Progettazione Software |

Workshop 2 Dic, Microsoft Italia - Segrate

 Dopo  il viaggio di ritorno e il meritato riposo si è conclusa bene anche questa avventura del Workshop "Architecture & Management".   E' stata un'esperienza positiva grazie al pubblico preparato e interessato e all'ottima organizzazione dell'evento. Quindi grazie ad Andrea e ad UGIdotNET per l'organizzazione, a Microsoft Italia per aver ospitato l'evento e alle "signorine Microsoft" per averci accolto col sorriso e agli sponsor Microsoft, ObjectWay e Managed Design.   L'avventura è iniziata con un brivido perché solo all'arrivo ho saputo che il PC su cui dovevo fare l'esempio "live" di Refactoiring non c'era. L'amico Riccardo Golia ha messo a disposizione un fantastico portatile e ha dato il suo aiuto per installare e...

Refactoring Applied: pratica avanzata del Refactoring

   Ho completato ora le slides e gli esempi per il Workshop "Architecture & Management" e mi stò preparando per partire in quel di Milano.    Non ho avuto aggiornamenti da Andrea su eventuali aggiustamenti di agenda per evitare la collisione con la sua sessione Designs Patterns applied di comune interesse anKe a chi fa Refectoring. Confermo l'agenda della sessione: Abstract - Perché fare Refactoring?   Riconoscere le situazioni ed i problemi che si risolvono con il Refactoring - Quali i prerequisiti per fare Refactoring?   Dotarsi del necessario per applicare il Refactoring in continuo miglioramento - Come comprendere e reagire ai feedback del codice?   Esempio "Live" di Refactoring del 2° tipo applicato...

Le Slide sono disponibili!!!

I posti disponibili per registrarsi all'evento sono andati esauriti in soli 3 giorni e molti non hanno potuto partecipare, credo quindi sia notizia gradita: le slides dell'evento sono disponibili qui. A mio avviso l'intervento di Joseph Perlin è stato stellare e da non perdere sono gli spunti interessanti relativi al rapporto col cliente usando i Metodi Agili (XP, SCRUM), le paure dei programmatori e del cliente e la carta dei diritti del cliente e dello sviluppatore (da tenere appesa in ogni ufficio!!!), le valutazioni di compatibilità caratteriale nelle coppie di Pair Programming, gli spunti per iniziare a mettere in pratica XP, gli spunti illuminanti su Refactoring,...

Progettare software, la realtà italiana e della community .NET

In chat con alcuni colleghi preparati ed esperti ho potuto scambiare opinioni sulla realtà italiana dello sviluppo del software ed in particolare la realta della commnity di sviluppatori .NET. Riccardo Golia ha riassunto ottimamente le varie opinioni nel suo blog: Uno spunto di riflessione dalla chat MVP: la progettazione del software. Presto avrò modi di raccontare come ho potuto iniziare a mettere in pratica in forma graduale i buoni principi dii gestione di un progetto, progettazione e implementazione ossia mettere in pratica i valori di eXtreme Programming e le sue tecniche. Questo aspetto tecnico è molto interessante. La cosa però che + mi ha sorpreso in questa impresa (esperienza) è...

Perché .NET è più sicuro???

Ho letto il post .NET e Virus Writing di Matteo G.P. Flora ed i commenti tra cui quello di Lawrence Oluyede e Pierre Greborio e ne aprofitto per rispondere a questa domanda "latente": Perché .NET è più sicuro??? Parlando di sicurezza, questa domanda non ha nessun significato se prima non si precisa proteggere cosa e da chi? .NET aiuta in maniera innovativa ed efficace un utente a proteggere il proprio PC durante l'esecuzione di ogni programma .NET che potrebbe potenzialmente contenere codice malizioso. Questo significa che è responsabilità dell'utente assicurarsi di avere installato una versione genuina (non manomessa) e funzionante del .NET Framework ...

Essere un programmatore migliore

Ho appena letto con sorpresa queste due notizie http://www.rai.it/news/articolonews/0,9217,86649,00.html http://www.ansa.it/awnplus/internet/news/2004-09-23_2759234.html ed ho cercato di accoglierle in maniera costruttiva. I prodotti software che contribuisco a realizzare in tecnologia .NET per piattaforme MS si trovano a competere con prodotti realizzati da altri programmatori in tecnologia Java per piattaforme Linux. E quindi il lavoro che svolgono moltissimi programmatori (io compreso ;-) ha rilevanza in questa sfida: se il prodotto realizzato soddisfa i bisogni del cliente è un punto a favore di MS diversamente no. Come Programmatore mi sono ripromesso di scrivere codice tanto ...

Ancora su Patterns in Interaction Design

Ho aprezzato il link sulla UI Design Pattern specialmente la sezione "Web Design patterns" postato qui da Adrian. In particolare ho trovato utili gli stili qui indicati: - il link "Web-based Application" - il link "Form" - il link "Input Error Message" - l'intero gruppo "Basic Interactions" - l'intero gruppo "Navigation" - l'intero gruppo "Managing Collections" - l'intero gruppo "Page Elements" Se interessano anche le tecniche di modellazione della interazione Web segnalo questo link: http://www.luca.minudel.it/freestaff/ingsoftdotnet.htm dove si trova il documento  'ANCOM.REQ-SPE-DTL.1000.pdf'. Nel capitolo 'SPECIFICHE DELL'INTERAZIONE UTENTE' sono citati due riferimenti a tecniche di modellazione dell'interazione con l'UML e nel seguito del capitolo c'è una applicazione delle due tecniche combinate (prendendo il meglio di ogniuna delle due ;-). Tags :  Progettazione Software |

Semilavorati software per .NET

I Semilavorati software sono una realtà consolidata nella produzione industriale del software così come avviene da tempo negli altri settori industriali. E come negli altri settori industriali l'utilizzo di semilavorati favorisce la riduzione dei tempi e dei costi, il miglioramento delle funzionalità e della affidabilità, la riduzione dei rischi e l'aderenza agli standard. Un elenco di semilavorati di successo per .NET è disponibile quI! Tags :  Progettazione Software |

Differenze tra applicazioni WinForm/LAN e WebForm/Internet

Mentre è in corso un lungo download da Internet... colgo l'occasione di una domanda sul forum per stendere alcune considerazioni che ho raccolto durante la transizione da Client/Server ad Internet, la stessa che molte aziende hanno affrontato grazie a .NET (e che quindi ho vissuto da vicino). -  -  - Ci sono molte differenze architetturali tra WinForm e WebForm: 1) - L'interazione GUI di una applicazione WinForm è tipicamente sincrona mentre quella di una applicazione WebForm è potenzialmente asincrona (es. quando l'utente invia una richiesta al server, nel tempo che intercorre per ricevere la risposta può annullare la richiesta, fare una richiesta alternativa o...

Un po di pratica: Remoting, Web Service, NUnit e TDD

In un blog precedente ho introdotto e distinto la serializzazione ad opera del Remoting da quella ad opera degli ASP.NET Web Service. Passando dalla teoria alla pratica ecco l'articolo: Serializzazione: .NET Remoting, ASP.NET Web Service e l'interfaccia IXmlSerializable. Con un approccio estremamente pratico descrive come: distinguere tra la serializzazione del .NET Remoting e quella degli ASP.NET Web Service conoscere le peculiarità dei Web Service realizzati col .NET Remoting e quelli realizzati con ASP.NET testare con NUnit se una classe o una struttura è serializzabile per il .NET Remoting ...