Progettazione Software

Definizione della Architettura Software, scelta della infrastruttura tecnologica, Progettazione e Disegno del software, implementazione e idiomi OO seguendo i metodi innovativi dell'informatica moderna e gli standard affermati. Con lo scopo di assolvere ai bisogni del committente e generare valore e nuove opportunità di business.

Summer reading list for the (to be) reformed leader.

Qui trovate la reading list sul blog della mia azienda: - http://www.smharter.com/blog/2018/07/04/summer-reading-list-for-the-to-be-reformed-leader/ E qui una selezione di posts da questo blog: - http://blogs.ugidotnet.org/luKa/archive/2012/06/25/summer-posts-selection-again.aspx

Nuova azienda, nuovo blog

Ho realizzato non tutti sanno che da qualche tempo mi sono messo dinuovo in proprio, ho aperto la mia azienda, e ho creato un blog aziendale. Questa è la mia nuova avventura: http://www.smharter.com/ E questo è il blog aziendale. Qui pubblico guide o post sul tema lean-agile IT/Business/Coaching, che a differenza di questo mio blog in UGIdotNET più riflessivo e personale, li i post sono piu pensati e con il lettore in mente: http://www.smharter.com/blog/ Accetto volentieri commenti e feedback.

Summer reading list

Summer is here. Time for a break, to re-energise, and explore. Here a summer reading list, books, for the (to be) reformed manager. It's from my company blog: - http://www.smharter.com/blog/2017/06/28/summer-reading-list-for-the-to-be-reformed-manager/ And here a selection of posts from this blog of mine: - http://blogs.ugidotnet.org/luKa/archive/2012/06/25/summer-posts-selection-again.aspx Have a nice summer !

Notes from Cynefin article: focus on how to act on different contexts

Here follow my notes and excerpts from the article: - A Leader’s Framework for Decision Making by David J. Snowden and Mary E. Boone. HBR, Nov. 2007 I advise to look also at the article's section: Decisions in Multiple Contexts: A Leader’s Guide. And here there is an extrimely short and simplified version from Alistar Cockburn: http://alistair.cockburn.us/Simplifying+Cynefin Obvious Sense-Categorise-Respond Sense =  assess the facts of the situation. Categorise = categorise 😃 It's easily discernible by everyone. Often, the right answer is self-evident and undisputed. Respond = base their response on established practice. Example Event: loan payment processing, are often simple contexts. If some- thing goes awry... Sense = an employee can...

Modern Quality Assurance: prescriptive vs reactive

In traditional industrial mass production, quality can be defined as conformance to specifications. And it can be assessed upfront in a prescriptive way. For complex industrial products this definition of quality at times can be not enough. While for digital products from the information-age, this definition is largely insufficient. As surfaced during a discussion with Mike Cohn, nowadays quality is also: Fitness for use and fitness for purpose Sometimes products, especially new ones, can get used in ways and for purposes that cannot be anticipated nor conceived. When people start using...

Product Owner role, tweets selection

This is a selection from 6000+ tweets and retweets posted here in 6 years. Product Owner role Confessions of a serial #ProductOwner, based on a true story by Anna Forss link RT @RonJeffries: We don't want a Product Owner. We want a Product Champion. link #ProductOwner  Embrace Uncertainty by Jeff Patton link Many key success factors for IT projects I worked with,very well explained in "Agile Product Ownership in a nutshell" link 5) Don’t know what I want, but I know how to get it: link RT ‏@lgoncalves 20 Product Owner Anti Patterns link #scrum #coaching #agile #productowner An example of expected skills set for a...

Truth & Reality: in general, in IT, and in Computer Science

This is a selection of tweets about truth & reality, ideology, cult, orthodoxy and prejudices - in general, in IT and in CS, from 6000+ tweets posted in 6 years. With minor edits to increase readability. Suggests additional tweets and comments, here and on twitter. I'll add them to the list.   TRUTH    What's art, what's not? What's good, what's not? What's right, what's not? What's true, what's not?  And who decides? Philosophy is a handbook of life, Andrea Camilleri - https://en.wikipedia.org/wiki/Andrea_Camilleri Social constructionism study the ways in which individuals and groups participate in the construction of their perceived social reality Consensus theory...

The 3 inspiring principles of microservices

The three inspiring principles of #microservices originate from: 1) Alan Kay definition of OO, 1967 2) Conway’s law, 1968 3) Unix design philosophy, 1969 1) Alan Kay definition of OO The big idea of OO for its inventor is “messaging”. OOP to Alan Kay means only messaging, local retention, protection and hiding of state-process, and extreme late-binding of all things. Internet, for OO inventor, is possibly the only real object-oriented system in working order, in which the basic unit of computation was a whole computer. A microservice runs in an isolated independent process, it's highly decoupled from other services, communicates only through a lightweight mechanism like...

“Don't bring me problems,bring me solutions." Really?!?!

“The thought that disaster is impossible often leads to an unthinkable disaster.” Gerald M. Weinberg Modern leadership is servant, modern managers are like hosts that receive and entertain guests. Team members have ownership and autonomy in the way, in the ‘how’, they pursue the value they are asked to create. When team members face difficulties, they raise obstacles to management attention. And managers act on the obstacles that bubble up from the team. This follows the principle of transparency and feedback. Are managers ready to hear about all these problems?   Continue...

“Don't bring me problems,bring me solutions." Really?!?! - Obstacles

“The thought that disaster is impossible often leads to an unthinkable disaster.” Gerald M. Weinberg Modern managers want to encourage teams and team members to solve problems on their own, they ask them to come prepared with solutions, not just problems. Sometime this goes too far, and I hear managers full of good intentions saying “Don't bring me problems, bring me solutions!” Team members don’t bring to their managers obstacles that they know how to fix and believe they can solve. They approach their managers with obstacles that: they don’t know how to solve ...

“Don't bring me problems,bring me solutions." Really?!?! - Responses

“The thought that disaster is impossible often leads to an unthinkable disaster.” Gerald M. Weinberg Here are few examples of what managers can do. For #1, managers can coach or mentor the team member to help her/him figure out possible solutions. For #2, managers can figure out what kind of help team member needs to implement the solution, then show her/him how to do it, then pair with her/him to solve it, then just observe her/him solving it. For #3, managers can support...

“Don't bring me problems,bring me solutions." Really?!?! - Conclusions

“The thought that disaster is impossible often leads to an unthinkable disaster.” Gerald M. Weinberg A good manager finds the time for listening to and helping team members, and finds time to invest in team members’ growth. A good team member doesn’t forget to provide regular updates, seeks regular feedback, comes with solutions when possible, and makes it clear what kind of help she/he expects from the manager. References: - The Agile Blindside by Esther Derby - Host leadership

Planning ÷ reacting: finding the balance

Life is what happens to you while you're busy making other plans - John Lennon, Beautiful Boy The are things that can be planned and others that cannot be. The conundrum is, which is which? What happens when someone plans things that cannot be panned or plans too much? relies too much on reacting? This is why it is important to find out in every moment the balance between the two, to know where planning is beneficial and where reacting is beneficial ...

Consequences for too much planning

When someone plans things that cannot be panned or plans too much: the time and effort spent for the planning don’t increase certainty and don’t reduce risks it can creates a false sense of certainty and safety this drives wrong decisions a plan over-detailed upfront stiffs innovation the time and effort spent for the unnecessary planning causes delays...

Consequences for too much reacting

Adaptation is a mindful response to unforeseeable events and change and to unknowns and uncertainties that unfolds. When adaptation is not so mindful because someone rely too much on adaptation (reacting too much, being too impulsive, continuous firefighting) : failure to take advantage of knowable information increases costs unnecessary adaptation cause excessive reworks no extra flexibility is achieved it can...

When to plan, when to react

Few examples follow.  Planning is beneficial with Reaction is beneficial with Customer objectives, priorities and requirements that are known, well understood, and stable ...

Agile Diversity, theme of XP2014 Rome

Transcript of the lightning talk at XP2014 about: Agile Diversity, theme of XP2014 - 15th International Conference on Agile Software Development May 26-30, 2014, Rome, Italy Who are you? Who am I? What defines yourself, your identity?  Each one of us is unique, is a distinct individual, and is different. Without diversity there is no identity, without diversity we would be just an army of clones.  For the only fact that we exist, we have the right to our identity, we have the right to diversity. This is true from a personal point of view, and it's also true in the workplace. The...

The nature of software quality, the complexity of the intangible

In my everyday life, here and there, I perceive humour and kindness, discipline and grace, personality and competence, easily and clearly. But when my colleague Matthew asked me to measure them, I realised that’s a whole different story. When you ask to 10 experienced software engineers, users and entrepreneurs what bad quality is in software, they will provide you plenty of examples. Then when you ask them to define good software quality and how to measure it, you’ll easily get 10 different answers. This is because nowadays we still don't have a rigorous definition for it, and we...

The 5th value of the Manifesto for Agile Software Development

There is one more important value in addition to the other 4 values of the Manifesto for Agile Software Development and its evolution: Critical thinking and independent judgment over the cult of personality and cult leaders It promotes scientific skepticism over cargo-cults. It promotes a pragmatic and contextual approach and plurality over simplified and absolute truths and orthodoxy. It helps to overcome things such as narcissism, self-interest, partiality, bias, cronyism, groupthink, and the likes that can affect individuals, (sub)communities, commercial organisations as well as thought leaders. Can you spot dysfunctions in IT and in the Lean and Agile community...

Professional software development between science, sound experience and beliefs

Is Computer Science a science that can currently support software development's decisions in the day-to-day work? Is sound experience enough to take decisions in software development? This is what I discovered from the reading list about the current state in: - Computer Science, research and academia - Professional Software Development and IT industry And the following are my - Conclusions

The 6 forgotten design principles & Conway’s Law

Component and services enable reuse and encapsulation of responsibilities and implementation details. They come into play when a monolithic application and a monolithic code-base is not enough anymore. These are the 6 forgot OO design principles about packaging cohesion & coupling that suggest criteria to group classes and responsibilities in components and services : REP The Release Reuse Equivalency Principle The granule of reuse is the granule of release. CCP ...

Dealing with uncertainty, unknowns, risks and change

More traditional approaches to projects management, products development and software development life cycle management focus on what is known & knowable Everyone have different innate abilities and preferences among reflection and planning Vs reaction and adaptation  and different levels of tolerance to  uncertainties, risk and change   while what matter is a balance and a tolerance that is good for the specific project/product and context.   What practices and skills are useful to deal with unknowns, how much risk and uncertainty is convenient for each specific product/project, what is a good balance between planning and reaction/adaptation in each specific context ? read about Contextual fitness...

Dealing with uncertainty, unknowns, risks and change: Structure & Organization

Structure & Organization From the work organization point of view there are 2 approaches with many differences between them: the Hierarchical organization of work (like i.e. the old military organizations) and the Edged organization of work (like i.e. the one of spontaneous online communities). It is common to have a mix of the 2, a Hierarchical organization optimized for the collaboration. That usually is more flat then deep and more cross-functional then specialized in silos. The idea again is to find a good mix that have the contextual fitness for purpose for the specific product/project and context. Let's compare the Hierarchical organization of...

Are you taking advantage of your Distributed Version Control System? (Comparing traditional VCS with DVCS)

At first glance DVCS (i.e. Git, BitKeeper, Mercurial, Baazar, etc) main advantage seems related to better branching and merging. Especially for those who experienced the pain of big merge-conflicts of long lived branches (*) with a traditional VCS (i.e. SVN, Perforce, TFVC, etc). In reality DVCS born to serve distributed remote teams. This is the main point, the distinctive characteristics originate from it and this is why DVCS can do that with simplicity and flexibility.   Here are 2 key distinctive characteristics of DVCS: Connection disruptions: when the connection between 2 remote teams goes down, each team member can continue...

Agility: definition, characteristics, advantages and inhibitors

Agility focus on individuals’, teams’ and organizations’ very practical characteristics and abilities that make them Agile. I find it as a natural companion to the Manifesto for Agile Software Development, and its origin and applications include areas as enterprises and military endeavors beyond software development. Agility has been defined, studied, experimented and documented by David Alberts and Richard Hayes between 2003 and 2011. The Definition of Agility Agility is a new way of thinking about and preparing for the unanticipated, is the capability to successfully effect, cope with, and exploit changes in circumstances. Agility is the degree to which one can maintain the level of performance...

Confronto tra VCS tradizionali e Distributed Version Control System

Ciao Gian Maria, commento qui il tuo post perche' dai commenti il sito mi risponde con un bel 500 !   ti condivido queste riflessioni sul argomento che ho approfondito recentemente. Per chi e' interessato ci sono due capitoli sul tema nel libro Continuous Delivery di Addison Wesley (sul Cap.3 e Cap.14). I DVCS come Git (o BitKeeper, Mercurial o Baazar, e altri ancora) nascono e sono preferibili ai tradizionali VCS nei casi di team di sviluppo distribuiti remoti, ancora di piu se in time-zone differenti (per cui puo succedere che il team che ha il controllo del repository o quello da cui viene un...

How software development teams deal with high levels of pressure and emergencies in F1 ?

The race start at 2pm no matter what and software development teams from different F1 teams  compete against the time and against each other to deliver features that give the best possible competitive advantage to their F1 team. They often deliver mission critical software, where serious bugs can affect the result of the race, in extreme conditions the safety of the driver, and during the last races of the season bugs and defects can jeopardize championship victory. Meanwhile software engineers are fully responsible of the outcome of their work, how the software will operate on the track and of the...

How software development teams deal with high levels of pressure and emergencies in F1 ? The Answer

How software development teams deal with high levels of pressure and emergencies in F1 ? Is not easy to articulate the answer to this question because it is a lot about actions and behaviors learned from practice and a network of collaborations, information exchange, trust and competences.  Here I try to describe it based on my personal experience. How software development teams deal with high levels of pressure and emergencies in F1 ? In sort a list from my experience: A minimal set of practices, checklists and skills required for an accurate and competent job ...

Cynefin exercise about Agile software development - 5 Key learnings (final)

This post is the 5th and final post of the series co-authored with Michael Podvinec where we write about the exercise and some of the insights gained: 1 - Intro 2 - Sense-Making 3 - Categorization 4 - Our exercise 5 - Key learnings Michael is a molecular biologist by training, and is convinced that agile methods have a place in all domains where we're commonly dealing with complexity and uncertainty, such as biomedical research.  He really promises he will soon publish more regularly on topics like ...

Cynefin exercise about Agile software development - 4 Our exercise

This post is the 4th of the series co-authored with Michael Podvinec where we write about the exercise and some of the insights gained: 1 - Intro 2 - Sense-Making 3 - Categorization 4 - Our exercise 5 - Key learnings Michael is a molecular biologist by training, and is convinced that agile methods have a place in all domains where we're commonly dealing with complexity and uncertainty, such as biomedical research.  He really promises he will soon publish more regularly on topics like these on his blog. Until then,...

Cynefin exercise about Agile software development - 3 Categorization

This post is the third of the series co-authored with Michael Podvinec where we write about the exercise and some of the insights gained: 1 - Intro 2 - Sense-Making 3 - Categorization 4 - Our exercise 5 - Key learnings Michael is a molecular biologist by training, and is convinced that agile methods have a place in all domains where we're commonly dealing with complexity and uncertainty, such as biomedical research.  He really promises he will soon publish more regularly on topics like these on his blog. Until then, he suggests you to...

Cynefin exercise about Agile software development - 2 Sense-Making

This post is the second of the series co-authored with Michael Podvinec where we write about the exercise and some of the insights gained: 1 - Intro 2 - Sense-Making 3 - Categorization 4 - Our exercise 5 - Key learnings Michael is a molecular biologist by training, and is convinced that agile methods have a place in all domains where we're commonly dealing with complexity and uncertainty, such as biomedical research.  He really promises he will soon publish more regularly on topics like these on his blog. Until then,...

Cynefin exercise about Agile software development - 1 Intro

I recently took part in a community exercise to examine the practices in Agile software development using the Cynefin framework as a categorization instrument. This post is the first of a series co-authored with Michael Podvinec where we will write about the exercise and some of the insights gained: 1 - Intro 2 - Sense-Making 3 - Categorization 4 - Our exercise 5 - Key learnings Michael is a molecular biologist by training, and is convinced that agile methods have a place in all domains where we're commonly dealing with complexity and uncertainty, such...

Recognizing and accepting what we don't know about professional software production

What if there are claims we cannot evaluate nowadays because there is no way to prove if they are correct or not? What if is hard to distinguish between mainstream ideas that everyone like from what really work in practice?  What if orthodoxy is used as a weapon to oppose disagreement and dissent in support of someone authoritativeness? What if for some problems we have to be highly intelligent and well informed just to be undecided about them? What if we recognize and accept what we really known about professional software production and what we do not? ...

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...

Summer posts selection

A selection of the best posts in English, for summer reading. Agile Foundations The dimensions of Agile Requirement's principles Small steps Vs ongoing big changes Doing Agile & Being Agile The most difficult things in Agile It is not possible to estimate what? Agile & Management Modern Leadership Traditional/Modern Management More on traditional and modern management Characteristics of Agile and Traditional Organizations The "Command and Control"...

Selezione estiva di post in italiano

Una selezione dei post in italiano piu interessanti, da leggere per l'estate. Le  tecniche descritte nel libro Working Effectively with legacy code Tutti i link raccolti qui Storia Informatica La storia dell'informatica Passione per l'informatica Le origini del calcolo digitale & la storia dell'informatica Sulle regole, sulla autorità e sul dissentire Dire di no Disciplina, è utile? a cosa? e come? Ancora sulla disciplina di un team Disciplina non significa comportamento autoritario ...

Why Complicate Software Projects ?

Dear Customer The Truth About IT Projects Why COMPLICATE Software Projects ? Want an estimation? .... Ask the best possible guess to the same team that will develop the system Want to know the real progress of the project? .... Deliver the system incrementally, early and often Want to accelerate the progress of the project? .... Ask people to frequently reflect on how to improve and support them in removing the obstacles Want to know if the users will like the product? .... Ask marketing to find alpha/beta users and deliver them a working system iteratively, early and often Want to know...

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...

Vuoi unirti alla nostra avventura/side-project/start-up ?

Vuoi unirti alla nostra avventura? Il progetto: nel tempo libero con un gruppo di amici particolarmente competenti & esperti stiamo lavorando a un side-project, una applicazione web con cui autori, hobbisti, aspiranti scrittori possano creare e micro-racconti in modo collaborativo e poi pubblicarli in un marketplace digitale. Il side-project è già avviato, abbiamo giá analizzato il modello di business, valutato il possibile mercato, individuato il bacino di utenza e trovati i primi gruppi utenti da contattare come...

It is not possible to estimate what?

There are some uncertainties that cannot be avoided or reduced, while instead they can be recognized and managed  Putting more time and effort to improve estimations of the uncertainties that cannot be avoided or reduced, will not improve the accuracy and reliability of those estimations. It is a waste. And not recognizing those uncertainties increase the possible consequences. Some problems are so complex that you have to be highly intelligent and well informed just to be undecided about them - Laurence J. Peter It is not possible to estimate what you don't know has never...

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 ...

Versione di #tweeeeeeeeeet per tweet in italiano, vuoi beta-testarla ?

Sto lavorando al una versione di  #Tweeeeeeeeeet capace di abbreviare anche i tweet scritti in Italiano. Se scrivi tweetti in Italiano e i 140 caratteri ti stanno spesso stretti, contattami se hai voglia di beta-testarla. La versione in inglese in alfa/beta é on-line:   #Tweeeeeeeeeet

Twitter Ninja technique: shorten your longest tweeeeeeeeeet with 1-click

Do you find your thoughts cramped in 140 characters sometime ? Do you sometime find yourself writing an incredibly long tweeeeeeeeeet ? Then you need to know this new ninja technique, try it on-line: #Tweeeeeeeeeet Is in beta: send your feedback to make it better And the source code? More at  https://github.com/lucaminudel/tweeeeeeeeeet/

Prepare to be surprised

Let's experiment, explore the unknowns and prepare to be surprised by unexpected results and to be open to evaluate all the possible explanations  -  Or we will possibly miss even our own maybe fortuitous discoveries and inventions. Perhaps the only thing better for a scientist than finding the crucial piece of a puzzle that completes a picture is finding a piece that doesn't fit at all, and tells us that there is a whole new part of the puzzle that we haven't even imagined yet and the scene in the puzzle is bigger,...

Ø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...

A sorpresa una mia intervista su .NET Rocks!

  Durante la conferenza Øredev 2011 ho fatto una chiacchierata con Carl Franklin e Richard Campbell di .NET Rocks! Con piacevole sorpresa ho scoperto che l'intervista é stata pubblicata qui: Cool Projects at Oredev Non vedo una mia grande carriera come ospite radiofonico, in ogni caso una bella esperienza :)))  

Punto d'incontro per developer con idee per side-project o start-up ?

Questa volta il post é una domanda. Qualcuno sa se esiste un forum/sito italiano dove sviluppatori possono discutere idee riguardo side-project e potenziali start-up e soprattutto aggregarsi e lavorate insieme a una di queste idee ? Per evitare risposte doppie ecco le risposte che ho finora ricevuto, tuttavia nessuna é dedicata a sviluppatori quindi la ricerca é ancora in corso: Italian Startup Scene, gruppo su facebook: interessante, non dedicato a sviluppatori http://www.ninjamarketing.it/startup/ : contiene link utili e interessanti, non dedicato a sviluppatori ...

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...

TDD & Design: quotes & ideas

TDD does not drive towards good design, it drives away from a bad design. If you know what good design is, the result is a better design  -  Nat Pryce TDD doesn't drive good design. TDD gives you immediate feedback about what is likely to be bad design  -  Kent Beck Writing tests is another way to look the code and locally understand it and reuse it, and that is the same goal of good OO design. This is the reason of the deep synergy between testability and good design  -  Michael Feathers 2 interesting questions then 1)    Why a team when writing...

JavaScrip: closure scope and other ideas

Interesting to know about the scope of variables  that: In Javascript there is no block scope, it means that a variable declared in a block (as a for body or an if body) belong to the containing function scope. In this example you see that all function created and stored in functs[] indeed refer to the same value of sWithBlockScope: http://www.pastie.org/2694945 Here all the function created and stored in functs[] are created inside a function scope from the function makeFunction  so each...

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...

Ericsson Agile Conference 2011 conference: looking at a large international company's agile transition

This 20th and 21st of November I've attended the Ericsson Agile Conference 2011 where Ericsson people from different divisions and countries meet up in Finland in Jorvas. You can try to search with Twitter for the tag #EAGLECON before Twitter memory vanish. Tens and tens of sessions, workshops and open spaces were held by Ericsson employees working in different roles while a few sessions were held by external speakers like me. Attending the sessions and listening I've been able to recognize also progresses, challenges and anecdotes similar to what I have seen and experienced in other teams...

From Beyond Agile to Advanced Agile: restarting the quest for craftsmanship

Looking at the successful artists I see that most of them spent their whole life learning and developing their techniques and languages, experimenting and practising, all before been able to create their masterpiece they are remembered for. We computer programmers use to proclaim ourself senior on some technique/technology after few years of practice. And for some of us the next step is to start to teach others and stop learning, questioning our assumptions, and so stop improving. The same is true when we developers learn, practice and master Agile, trying also to become Agile...

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...

Technical Debt or Management Debt ?

From long time sw developers are used to discuss, analyze and try to avoid technical debt. Are managers and sw project managers discussing about Management Debt as well ? I annotate some form of Management Debt here: multitasking (*) lack of decision-making decision-making before the last responsible moment ignoring available data and info ignore feedback from real users or co-workers procrastinating release in production ...

Code is a form of human communication

Code is a form of human communication. ... Remember, whether you like them or not, other people are going to read your code, and you owe it to them to make what you wrote easy to read. From: Literate Coding, George V. Neville-Neil See also: Literate programming

Discipline and Organizations

Source: http://jeffsutherland.com/aggressivescrum.pdf An also, from http://jchyip.blogspot.com/2010/12/discipline-vs-bureaucracy.html

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...

Make your unit tests easier to read & resilient to changes

This presentation Sustainable Test-Driven Development discuss and show how to make : unit test code easier to read failing test messages easier to understand unit test code more resilient to changes in application implementation details Writing your own DSL to create tests data builders helps for point (1):  indeed it make test setup code more short and easier to read. Also the DSL separate the definition of what test data is created (the setup code of the tests do this) from the implementation details...

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...

Licenza CC per il Blog - CC License for this Blog

Ho aggiunto la licenza Creative Commons al Blog. L'uso e il riutilizzo del contenuto di questo Blog é benvenuto e incoraggiato in tutte le sue forme.  Per qualsiasi tipo di utilizzo, commerciale e non.  Ció che é scoraggiato e perseguibile per legge é utilizzare il contenuto assegnandosi la paternitá o non attribuendo correttamente la paternitá del contenuto riutilizzato. Have just added Creative Commons License to the Blog. The use and reuse of the content of this Blog is welcome and also encouraged. For any kind of commercial and non commercial use. What is discourage and will be persecuted is any reuse of the content...

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 ...

Battleship AI coding competition 3^ tornata: Conclusione e "nuovo inizio"

I risultati della 3^ e finale tornata sono qui. Complimenti a Andrea Angella & Valerio Vitacolonna !!! In conclusione complimenti a Andrea Angella e Valerio Vitocolonna per aver realizzato l'algoritmo piú competitivo, a Fabio Rocca per essersi aggiudicato le prime 2 tornate e a Mauro Bellati per aver colto lo spirito della competizione e usato la sfida  per divertirsi e sperimentare sul codice. Complimenti a tutti i partecipanti i cui algoritmi hanno battuto 7 degli 8 algoritmi partecipante alla precedente edizione ! La descrizione delle strategie e il codice degli algoritmi sara disponibile a breve. Nuovo inizio La competizione ufficiale é definitivamente conclusa con i suoi...

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,...

Battleship AI coding competition: risultati 2^ tornata e inizio 3^ tornata

I partecipanti alla 1^ tornata non hanno presentato in tempo per la fine della 2^ sostanziali modifiche agli algoritmi giá presentati in precedenza, ma hanno chiesto tempo per lavorare ancora agli algoritmi e migliorarli. Quindi si puo dire che i risultai della 2^ tornata coincidono con quelli della 1^ tornata oggi inizia la 3^ tornata che si conclude a mezzanotte di domenica 14 Novembre Le regole di partecipazione alla 3^ tornata...

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...

Battleship AI coding competition 1^ tornata: Risultati !!!

I risultati della 1^ tornata sono qui. Complimenti a Fabio Rocca !!! E complimetni anche agli altri che il cui algoritmo ha battuto 7 dei partecipanti dalla precedente edizione! Qui c'é la descrizione delle strategie implementate dagli algoritmi:  strategie E qui il codice degli algoritmi presentati: http://dev.luca.minudel.it/Battleship_competition_1ma_tornata.zip Questo da ufficialmente inizio alla seconda tornata che avviene in chiaro cioé conosciendo l'algoritmo presentato dagli avversari alla tornata precedente. Questo permette agli inseguitori di provare i loro miglioramenti contro il diretto avversario ma da all'avversario il vantaggio competitivo di concentrarsi su un nuovo miglioramento della strategia. Occhio: copiare anche solo in parte il codice di...

Battleship AI coding competition: UGI di nuovo online, consegna soluzioni prosegue

UGI é tornato on-line e riprende la raccolta delle soluzioni per la 1^ tornata che si conclude con consegna del codice prevista  entro oggi 10 Ottobre Aggiornamenti sulla raccolta delle soluzioni in corso e dei risultati, qui. Tags :  Creatività | Translate into ENGLISH >>>

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...

The 7 fundamental principles of Software Requirements

When trying to reach a moving target, making a good plan is extremely hard, while planning and executing small steps within short inspect-adapt loops is extremely easier. The faster the target is moving, the more increasing inspect-adapt frequency is beneficial/advantageous/profitable over perfecting the plan. After all it is not possible to adapt the reality to a plan, it works better to adapt the plan to the reality. Here 2 stories: Speed of Iteration Beats Quality and how Paul MacCready won a million dollars prize When trying to deal with unknowns & uncertainty & disagreement, making a good forecast is extremely hard. When...

Battleship AI coding competition: Inizia !

Battleship AI coding-competition: ha inizio la sfida a chi riesce a creare il miglior algoritmo di battaglia navale. Le regole del gioco di battaglia navale insieme a quelle della competizione e le date sono disponibili qui: Battleship AI coding-competition: date e regole del gioco Scarica il codice della competizione con l'interfaccia IBattleshipOpponent da implementare qui: http://dev.luca.minudel.it/battleship_competition.zip La prima delle 2 tornate si conclude il 10 Ottobre. Il codice per partecipare alla prima tornata e ottenere il diritto di partecipare alla seconda dovrá essere consegnato entro e non oltre il 10. Per ogni domanda, basta postare nei commenti. Edit 20 Set: Come rischiestomi faccio...

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...

Software Engineer o PR Microsoft?

Parto dal post The Future of Silverlight del Silverlight Team Blog per suggerire una opportunitá di miglioramento. Silverlight é stato un prodotto che ha esplorato delle possibili aree di innovazione e che ha mantenuto le opzioni aperte in attesa di scoprire come si sarebbe sviluppato il futuro del HTML 5. Una strategia di innovazione che invidiamo a Microsoft e vorremmo fosse adottata anche dalle aziende per cui lavoriamo. Nessuna delusione quindi per un naturale cambio dei piani, anzi un hurrá per Microsoft che ha trovato la strada migliore che porta verso il futuro prossimo. Il suggerimento va invece a...

Battleship AI coding-competition: date e regole del gioco

La coding-competition comincerá il 20 settembre con la pubblicazione del codice del framework che contiene l'interfaccia che ogni algoritmo di Battleship iscritto alla competizione dovrá implementare. La competizione sará in 2 tornate: 1^ tornata, consegna del codice entro il 10 Ottobre 2^ tornata, consegna del codice entro il 31 Ottobre Regole del gioco Battleship: Si gioca su una griglia 10x10. Ogni giocatore dispone sulla griglia 5 navi di lunghezza: 2, 3, 3, 4 e 5. La navi possono essere adiacenti ma non sovrapporsi. Ogni...

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...

Test driven development: empirical body of evidence

Here the pdf: Test driven development:empirical body of evidence See also: TDD--The Art of Fearless Programming, Studies on Effectiveness of TDD and Empirical Studies on Software Quality Mythology

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...

Quali tecniche fanno parte della tua Arte di Programmare?

Quali tecniche, quali invenzioni e quali scoperte fanno parte della tua Arte di Programmare? Dargli un nome, renderle esplicite e consapevoli, condividerle e confrontarle è più utile e vantaggioso di quanto potessi immaginare. Comincio con il condividere le mie e aspetto di conoscere nei comments anche quelle degli altri. (((Clicca x leggere)))

Innovation, Disruption and the Future of the Web

Una presentazione interessante di Mitch Karpor, un personaggio che ha fatto la storia dei PC (leggi qui). Qui la presentazione: http://www.infoq.com/presentations/mitch-kapor-keynote-glue-web Dal minuto 30 considerazioni illuminanti: algorithms Vs humans e algorithms that argument-supplement creativity, human wisdom and  good human judgment poi sulle startup start-up "waterfall" Vs data-driven inspect-adapt start-up   Tags :  Team Work | Agile | Complessità | Creatività | Innovazione |

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...

A good problem-solving strategy that I've learn while taking an online assessment

The online assessment was about C#  and the result was very good, but this does not really matter. What matter is that I had to answer to every question in a short time (3 minutes) using all I wanted : books, internet, my PC and of course my own knowledge.  So the main constraint here was the time, like in the real life you cannot stretch or shorten the time. What worked best, which was the best strategy ? ...

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...

Agile Skills Project

An ongoing project to define an Agile Skills Inventory and also defining a “learning ecosystem” including paths of learning, or “quests” and defining self and peer assessments: http://agileskillsproject.com/ and https://sites.google.com/site/agileskillsprojectwiki/home Tags :  Team Work | Agile | Pratiche |

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...

A quote of Richard Phillips Feynman

A quote of Richard Phillips Feynman (Nobel in Physics 1965) from 'The Character of Physical Law' (1964): It doesn't matter how beautiful your theory is, it doesn't matter how smart you are. If it doesn't agree with experiment, it's wrong. Tags :  Team Work | Agile |

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...

Agile practices granularity and time scales

From A Simple Model of Agile Software Processes by Glenn Vanderburg:  

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...

Ruby: il bello e il brutto di

Il brutto: Monkeypatching is Destroying Ruby I pro e i contro: Ruby at ThoughtWorks (Fowler analizza pro e contro con dati reali da progetti cliente fatti con Ruby) Ruby per .NET: IronRuby In estrema/esagerata sintesi alcune frasi rubate:      It offers palpable gains in productivity      Is Ruby Slow? In a word "yes" even by the standards of scripting languages      Is a Ruby Code-base Hard to Understand? no se hai sviluppatori sopra la media, che usano approcci altamente           disciplinati come XP e danno molto valore ai test Un libro per cominciare ? L'esperto...

Le “verità” sul Project Management

Un post spassoso di Lorenzo: Le “verità” sul Project Management Le mie preferite sono 8) There's never enough time to do it right first time but there's always enough time to go back and do it again. 51) The person who says it will take the longest and cost the most is the only one with a clue how to do the job. 6) A user will tell you anything you ask, but nothing more. E le tue ? Tags :  Team Work | Agile | Leadership |

Anybody May Legally Implement the C# and CLI Specifications (thanks Microsoft!)

Microsoft Community Promise Read the full article: Anybody May Legally Implement the C# and CLI Specifications

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, XP e le pratiche di Engineering

I metodi Agili come Scrum e XP non sostituiscono le pratiche di software engineering come ad esempio: - Analisi e definizione dei requisiti - Definizione delle specifiche - Disegno e modellazione del sistema - Implementazione - Versioning e Release management - Verifica e validazione - Stima E nemmeno si sovrappongono.      I metodi Agili fanno si che ogni pratica di engineering sia impiegata nella misura in cui serve allo specifico progetto (che emerge dal loop di inspect-adapt) con semplicità (dovuta all'uso costante/iterativo della pratica, dalla sua specializzazione  e dalla consapevolezza del fattore  umano/sociale) Cosi nella pratica in molti casi si scoprono degli...

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...

In equilibrio tra focus e creatività (da David Allen di Get Things Done)

     La capacità di controllare gli impulsi, concentrarsi è importante per imparare e sviluppare nuove abilità, per le relazioni personali e sociali e per il lavoro:     impegnarsi, organizzarsi, superare le distrazioni, adoperare la memoria e il pensiero sequenziale razionale_ Come lasciare spazio alla creatività in tutto questo ? Usando la capacità di distinguere un idea da un impulso a distrarsi,  lasciare spazio all'idea nel luogo e nel momento in cui arriva, fermarsi per svilupparla e... catturarla! All'inizio può essere caotico, una volta abituati è produttivo e creativo - imparare/fare/realizzare ricomincia a essere divertente Fonte: Be creative amid chaos, David Allen Tags...

2 giochi iper-tecnologici per il futuro prossimo

Natal, da Microsoft Natal Hands On Giz from Gizmodo on Vimeo. Qui: http://gizmodo.com/5277954/testing-project-natal-we-touched-the-intangible Augmented-reality geisha Qui: http://gamesalfresco.com/2008/07/20/want-your-own-augmented-reality-geisha/ Fonte: http://www.wired.com/beyond_the_beyond/ Tags :  Creatività | Innovazione |

Un esempio di semplicità col TDD: state based vs interaction based

    ((( continuo la serie di post pratici sulla semplicità ))) Gino ha a disposizione l'intero giorno in pair programming col collega per chiarirgli la differenza tra state e interaction testing. Per farla semplice da dove comincia? Comincia in pair a implementare uno state based unit test evidenziando i passi : Istanzia l'oggetto usando Stub per eventuali dipendenze esterne Inizializza lo stato dell'oggetto da testare Richiama l'operazione da testare Verifica che lo stato finale dell'oggetto è quello...

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...

Where 2.0 conference

Si è conclusa oggi la Where 2.0 Conference 2 idee simpatiche : DIYcity: How do you want to reinvent your city? e Glympse  : Tags :  Comunicazione | Creatività | Innovazione |

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...

Sulla persuasione (Selling Scrum)

     Uno che vende numeri del Lotto invece di giocarseli mi lascia perplesso tanto quanto uno che vuole venderti "Scrum" invece di prodursi buon software - nonostante il titolo questo post sulla persuasione l'ho trovato utile : Selling Scrum: How to persuade people to change! Alcune frasi But if you are in a position to give instructions or give orders, you cannot do this unless you have a lot of confidence about what you are saying. However, people's ideas are unreliable things and I would be impressed if we were right half the time. ... ... We are all human and we...

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à ...

Working Effectively with legacy code: link & riferimenti & sintesi

Raccolta di link, riferimenti, sintesi a complemento del libro Working Effectively with legacy code di M.C.Feathers e su coding (clicca sul titolo per visualizzare)

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 |

Situazioni da team: sperimentazioni pericolose

    Qualche tempo fa avevo raccolto opinioni su quanto fosse professionale quando nel team un tuo collega per passione, per curiosità, per interesse o per semplice aggiornamento professionale decide di sperimentare in un progetto  per un cliente alcune soluzioni tecnologiche che non conosce e quindi non ha una ragionevole certezza di padroneggiarle a sufficenza Qui il post con ogni singolo feedback e la sintesi finale: Situazioni da team: azzardi tecnologici      In questo post ho trovato una posizione interessante sull'argomento e consiglio di leggerlo: Keeping up is not enough Se qualcuno vuole commentare ancora sull'argomento, naturalmente...

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 |

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...

Geobook geo-aware social network

Cosi come le Social Network tipo Facebook hanno unito in modo inestricabile il mondo virtuale di internet alla nostra vita quotidiana...    ...Similmente la social network Geobook  unisce in tempo reale le persone che incrociamo fisicamente per la strada con la loro presenza sulle social network       Ad esempio mentre siamo ad una conferenza possiamo avviare una applicazione sul nostro iPhone, Android, Blackberry o Windows Mobile e grazie al GPS interno comunicare la nostra posizione a Geobook e scoprire se li ci sono altri colleghi che abbiamo linkato su Linked-In       O mentre siamo facendo i turisti per caso grazie al GPS la...

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...

Il codice che scrivi parla di te ?

Delle volte mi è capitato di notare delle similitudini almeno strane    Ad esempio tra l'approccio che ha un turista nel girare per una città o un museo e il modo che ha di cercare e scovare informazioni in internet con Google        Tra la costanza che ha una persona nella vita di tutti i giorni , la sua capacità di sopportare e superare la frustrazione e di mantenere     calma e fiducia     anche nelle difficoltà  e la sua capacità di affrontare e risolvere  bene problemi di programmazione impegnativi anche in condizioni difficili    Tra l'efficacia con cui una persona riesce tra...

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....

Lascia decidere l'utente

Quando c'è da prendere una decisione che ha impatto sul lavoro del'utente il compito dello sviluppatore, del coach e del project manager è quello di lasciare scegliere l'utente (il product owner). Anche se nel team c'è un esperto di dominio che conosce perfettamente il business dell'utente, difficilmente può conoscere la quotidianità in cui l'utente lavora e tutte le implicazioni della decisione sul suo lavoro. Ma anche se ipoteticamente le sapesse, l'utente è un'altra persona e quindi ha priorità, obiettivi, metri di giudizio propri. Le differenze sulla priorità/importanza sono più di quelle che si è portati a credere. In "The Manager as Negotiator" (D.A....

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...

Creatività & profitto

Ok, storie di artisti vissuti in povertà non mancano e forse nemmeno di grandi inventori "sfortunati". Per stare nel nostro campo (l'informatica)  Sir Clive Sinclair  la dice lunga :D    -    Altrettante le storie di artisti popolari e dalle opere determinanti quanto gli inventori di successo. I successi raggiunti con la creatività quali caratteristiche hanno in comune   ??? Mi vengono in mente successi nella architettura, nell'arredamento, nella moda, nella pubblicità, nelle auto sportive e di lusso    (( ( l'Italia ha una forte tradizione in questi settori ) ))    in cui creatività si traduce in prodotto     La frase più in tema che ho in mente  "il compito del design è di stare...

Perché passare a soluzioni "ASP.NET REST-ful"... IMHO!!!

Segnalo questo post interessante e di taglio pratico su REST : Perché passare a soluzioni "ASP.NET REST-ful"... IMHO!!!

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_...

Libro: Object-Oriented Reengineering Patterns

Segnalo il post di Antonio Ganci sul libro Object-Oriented Reengineering Patterns disponibile online on pdf e ordinabile in formato cartaceo: http://blogs.ugidotnet.org/AntonioGanci/archive/2008/06/09/92985.aspx Contiene la prefazione di Martin Fowler e una recensione di Kent Beck. Rilancio qui la considerazione proposta nei comments ad Antonio Lo scopo del disegno è rendere una applicazione facile da evolvere e modificare: - ha senso distinguere il design dal redesign ? - imparare il design non dovrebbe significare imparare a fare redesign cominciando con applicazioni legacy ?  

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...

I metodi Agili riscrivono le convenzioni ?

      Sto scoprendo che i metodi Agili guardano le cose da un punto di vista inconsueto rispetto alle abitudini consolidate nel modo classico di condurre i progetti software.  Quasi promuovono una nuova forma mentale.   Ecco gli esempi che ho raccolto senza dimenticare il  m a n i f e s t o :   La cultura del imparare invece del evitare gli sbagli Consuntivo sulle funzionalità e sul valore consegnato invece delle stime di previsione e consuntivo dei tempi Far emergere i possibili problemi per...

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 |

MVC - Real Report from the field

  Ecco un altro interessante resoconto di utilizzo di MVC MVP dalla trincea della produzione di software commerciale : Link : La mia esperienza con il pattern MVP , Fonte : Andrea Canegrati  

Il materiale del Italian AgileDay 2007 è on-line

  Qui  x tutte le sessioni i doc , le slide e i link :  http://www.agileday.it/index.php?page=slides E qui foto pubbliche dell'evento: - http://www.fabiobeta.it/photos/AgileDay2007Photos/  - http://picasaweb.google.com/matteo.vaccari/AgileDay2007   Tags :  Team Work | Agile | Eventi |

Architettura Real Life : adattabilità alle evoluzioni tecnologiche

Marco ha postato una riflessione sulle evoluzioni del Framework con conseguenti rilasci di nuove versioni e l'impatto che ha sul codice esistente. Raffaele ha indicato un caso in cui  le novità tecnologiche gli hanno portato qualche sconvolgimento. Lo trovo un interessante caso reale per pensare alla 'adattabilità' come potenziale requisito architetturale : qui il post http://blogs.ugidotnet.org/marcom/archive/2007/11/08/89525.aspx#354914    

Italian Agile Day 2007 - l'agenda

L'agenda è on-line ! Per chi non lo conoscesse  è l'evento che raccoglie la comunità italiana di appassionati ed esperti di metodologie Agili. La sfida è produrre e consegnare in tempo software di qualità che soddisfa il cliente ed è facile da evolvere. Sessioni , experience report cioè storie vere di vita "agile" vissuta e numerosi open space. Sarà l'occasione per incontri internazionali : Tim Mackinnon , Francesco Cirillo. e Marco Abis. Ci si vede li ?     Tags :  | Agile | Eventi |

[OT] Le cattedrali tecnologiche raccontate da LEWIS BALTZ

  Le cattedrali tecnologiche del recente passato - con le speranze e le promesse, anche quelle mancate Raccontate da LEWIS BALTZ nella mostra fotografica '89-91 Sites of Technology' in questo periodo a Modena  Unoccupied office, Mitsubishi, Vitre (FR)   Worker, clean room, Toshiba, Kawasaki City (JP)   Cry supercomputer, CERN, Geneva Ho comprato anche il catalogo della mostra, un bel viaggio tra passato e futuro di questa professione, un po come The Hacker Crackdown di Bruce Sterling  

XPLWebinar 6 Nov 2007

  La chat organizzata da Emanuele qualche tempo fa sui metodi Agili è stata interessante per le persone incontrate e le esperienze che ci siamo raccontati. Il 6 Novembre alle 18 ci sarà online un XPLWebinar un seminario in cui verranno presentati argomenti e proposte discussioni sui metodi agili. Parteciperà Francesco Cirillo (se avete girato la copertina del libro di Kent Back il suo nome l'avete già incontrato). Le info per partecipare qui : http://www.xplabs.it/xplwebinar.html   Tags :  | Agile | Eventi |

[OT] Design

www.jenstark.com Tags :  Creatività |

Intuito e visione d'insieme

Annotazioni rileggendo Extreme Programming Explained: Embrace Change, 2nd Ed. di Kent Beck. "This is the paradigm for XP. Stay aware. Adapt. Change." "The Theory of Constraints is a way of understanding systems and improving their throughput." "The practices are  also useful because they give you a place to start. You can start writing tests   before changing code, and gain benefit from doing so, long before you understand   software development in a deeper way.Even if I knew all the same gardening   practices as Paul, I still wouldn't be a gardener. Paul has a highly developed   sense of what is good and bad about...

Fare parte di un Team oppure no ?

  Fare parte di un gruppo, di una squadra, di un team ...     richiede il rispetto di alcune regole comuni per lavorare bene insieme in modo coordinato e un po di disciplina per far buon uso delle regole ed evolvere     comporta dei vantaggi come l'accesso alle conoscenze condivise e alle risorse del team, il supporto collaborativo dei compagni e il mutuo soccorso     necessita di spazi in cui poter esprimere la propria individualità all'interno del gruppo, dare il proprio contributo in modo rilevante e vederne riconosciuta l'importanza e il valore. ______________ Una persona può preferire di non entrare a far parte di un Team perchè considera le...

Intanto rilascio poi lo sistemo 2°

Oltre alle considerazioni linkate nell'ultimo post ecco altri due pensieri interessanti sull'argomento: Failure is not an option : <<We continuously deploy solutions just a bit late, almost with all the desired capabilities, that works in most cases for some time.>> Come va a finire ? Leggilo qui :  http://pierg.wordpress.com/2007/09/10/failure-is-not-an-option/  Fail Fast : http://martinfowler.com/ieeeSoftware/failFast.pdf articolo...

Design Pattern simmetrici

Design Pattern simmetrici rispetto l'ereditarietà e il contenimento : DesignPatternSimmetrici  . Fonte : http://wiki.ugidotnet.org/ 

Imparare i Design Pattern applicati a .NET

Ecco qui finalmente il QuartoPassoPerImparareIDesignPattern che completa la serie ImparareIDesignPattern dedicata alla descrizione dei design pattern con le loro applicazioni a .NET .   Tutti i pattern hanno trovato degli esempi ad applicazioni significative nel  .NET Framework, tutti tranne questi 3 :  PatternState, PatternVisitor, PatternInterpreter . C'è un esperto in grado di scovarli ?   Fonte : http://wiki.ugidotnet.org/ 

Progettazione software, un esempio di vita reale

Stufo di paroloni con cui riempirsi la bocca e citazioni imparate a memoria dai libri? Stufo di dissertazioni sui massimi sistemi che nulla portano di concreto alla vita di un prodotto software? Allora sei pronto ad uscire da Matrix :D Ecco un esempio di vita reale di un architetto. L'intera sequnza di commenti è molto interessante.

Model View Controller feat. web user interfaces: slide e video dagli Architectire Days

Grazie all'instancabile presidente ecco on-line il video e le slide dagli Architectire Days della sessione 'Model View Controller feat. web user interfaces': http://www.guisa.org/files/folders/architecture_days_2006/entry612.aspx http://www.guisa.org/files/folders/architecture_days_2006/entry608.aspx Se il codice d'esempio è per le applicazioni Web è vero che il tema dell'interazione utente e dei suoi aspetti progettuali è trattata in modo da essere utile anche per applicazioni WinForm come ho avuto modo di verificare in prima persona ;-) Qui il materiale degli altri eventi a cui ho preso parte.

10 criteri per valutare il disegno della tua applicazione, gestire la complessità, etc.

Ecco 10 criteri per valutare il disegno di una applicazione e suggerimenti per possibili miglioramenti: http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/ValutareIlDisegnoDiUnaApplicazione.html  Sulla Rubriki di Dicembre altri spunti molto interessanti sul disegno di una applicazione : http://blogs.ugidotnet.org/rubriki/archive/2006/12/15/59578.aspx e l'esperienza nel gestire la complessità delle applicazioni raccontata direttamente da Igor Damiani qui: http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/ManagingComplexity.html

La coesione dei metodi di una classe

La definizione di coesione a livello di granularità dei metodi spiegata da Antonio Ganci: http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/Cohesion.html

Pillole di Domain Driven Design by Janky

Ecco un'introduzione di Janky sul Domain Driven Design:  http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/PilloleDiDomainDrivenDesign.html  

Architettura del software: un approccio agile - slide & video disponibili

Eccolo finalmente on-line il materiale del Web Cast "Architettura del software: un approccio agile" che ho tenuto qualche settimana fa in cui parlo della mia esperienza con l'architettura fatta adottando un approccio agile. Alcuni dati interessanti: Dei vari temi disponibili in scaletta i partecipanti hanno votato i 2 argomenti preferiti che durante il web cast abbiamo affrontato più approfonditamente: Gli strumenti dell'Architettura nell'approccio Agile, le tecniche e gli skill (prima scelta con preferenza del 46%) Far emergere l'Architettura gradualmente, nel software legacy e nei nuovi progetti (seconda scelta con preferenza del 62%) Gli altri temi disponibili e nuovi temi emersi dalle domande e dal feedback durante...

Chat sulle metodologie agili

Martedì 19 Dicembre ci sarà una chat dedicata alle Metodologie Agili organizzata da Emanuele Del Bono. E' un'occasione per conoscerci e iniziare a parlare di questo argomento,  per esempio per introdurre l'argomento, risolvere i dubbi più comuni, condividere impressioni ed aspettative, approfondire l'argomento scambiandoci link e riferimenti a materiale online, scoprire quanti e cosa hanno già sperimentato, cercare indicazioni per i prossimi passi. E per vedere cosa succede ;-) La chat inizierà alle ore 21.00 su MSN Messenger, la partecipazione è libera ed è sufficiente contattare Emanuele qui: http://blogs.ugidotnet.org/blogema/archive/2006/12/02/58341.aspx . Non mancherò , ci si vede li !

Risorse on-line per Architetti

Ho trovato la segnalazione di Michele Bersani molto interessante, mi ha spronato a raccogliere qui altri link sul tema:  Object Mentor Articles: http://www.objectmentor.com/resources/publishedArticles.html  ObjectiveView Magazine: http://www.objectiveviewmagazine.com  Architecture Journal: http://www.architecturejournal.net/ (segnalato qui da Michele Bersani)   E se qualcuno si è distratto un attimo ... GUISA http://www.guisa.org/ MSDN Architetti http://www.microsoft.com/italy/msdn/risorsemsdn/architetti/default.mspx Wiki .NET http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/ProgrammazioneObjectOriented http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/DisegnoObjectOriented http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/ArchitetturaObjectOriented http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/LibriSuObjectOrientedDesign

Ready to start: Architettura del software: un approccio agile.

Inizia oggi (27-Nov) alle 14.30 il Web Cast dedicato agli Aspire Architect dal titolo               'Architettura del software: un approccio agile'. Il Web Cast si snoda in 4 punti: Il ruolo dell'Architettura nell'approccio Agile (differenze dall'approccio classico) Gli strumenti dell'architettura Agile (tecniche e skill) Una visione moderna dell'Architettura (principi e ruolo dell'Architetto) Far emergere l'Architettura gradualmente (dal codice legacy e dal nuovo codice) è organizzato da GUISA e Microsoft Italia. http://www.luca.minudel.it/link.html

Web Cast 'Architettura del software: un approccio agile'

  Tra qualche giorno, il 27 alle 14:30 inizierà il Web Cast 'Architettura del software: un approccio agile', è il terzo degli 8 dedicati agli "Aspire Architect" e organizzato da GUISA e Microsoft Italia. Il Web Cast parla dell'architettura del software nell'approccio agile allo sviluppo del software e affronta argomenti interessanti anche per chi segue l'approccio classico. Perché partecipare al Web cast? Ecco dei buoni motivi:- I principi della moderna della architettura, anche quelli applicati allo sviluppo classico, provengono dallo sviluppo Agile.- In un team agile è naturale imparare l'arhitetturara del software praticandola.- L'approccio Agile consente di migliorare l'architettura anche di sw legacy.- L'approcio Agile...

Architettura, una visione moderna

Annoto questa segnalazione estremamente interessante EnterpriseArchitecture 2.0  .

Architettura: Inversion of dependency dal data layer in su

Questo articolo di MS descrive 4 modi di rappresentare le entità da persistere sul db e farle fluire tra i vari strati: valori scalari xml senza xsd e poi con xsd dataset/datatable con inverion of dipendency non tipizzati tipizzati entità di business non crud con inverion of dipendency crud (non preferibili alla non-crud) descrivendo come in base alla situazione scegliere una rappresentazione o l'altra: Progettazione di componenti per l'accesso ai dati e passaggio dei dati da un livello all'altro. In molti progetti ho trovato le soluzioni 3 e 4.1 adatte (e a volte la 2 e in piccoli ambiti la 1) permettendomi di evitare i costi e la complessità che ha la 4.2. Il principio di inversione delle dipendenze ha il grosso vantaggio di eliminare...

Architecture Days: i link della sessione "Model View Controller feat. web user interfaces"

Come promesso ecco i link dei temi toccati durante la sessione. Per qualsiasi domanda, suggerimento e/o feedback qui e nei contacts è ok.Questi argomenti sono pane per i denti di un Architetto ;-)   L'implementazione del MVC e del  Application Controller, WebPer scaricare il codice di NSK su CodePlex: cliacca quiLe diverse pagine Web che implementano l'MVC con View e Input-Controller uniti le trovi qui: \ManagedDesigns.Northwind.Web\backoffice\enternewordermentre due diverse implementazioni di View e Input-Controller separati sono nelle pagine RequiredDeliveryDate.aspx e ShippingAddress.aspxL'Application Controller lo trovi qui: \ManagedDesigns.Northwind.Web\App_Code\BackOffice.EnterNewOrderLe istruzioni per vederlo in funzione: sono qui Le schede CRC (Class Responsability Collaborators), Web/WinUna introduzione all'argomento in inglese: clicca qui Può servire una introduzione in...

Workshop "Architecture Days" Special Extra Track

Durante il fantastico workshop "Architecture Days" ho avuto un insapettato special extra track incontrando alla mensa insieme a Federico e Massimo Hard-Rock (ciao ;-)) l'amico ed ex collega Giulio (Small notes from the field) che da tempo lavora in Microsoft. Una chiacchierata interessante ed il confronto di opinioni anche tecniche mi ha regalato piacevoli conferme ed interessanti spunti sul futuro, naturalmente le parole architettura, infrastruttura, progettazione, estensione, configurazione, personalizzazione, evoluzione non potevano mancare.Rinnovo qui i mie saluti e ringaziamenti a Giulio. P.S. dimenticavo, qui le foto della sessione ;-)

Pattern di Unit testing: XUnit Test Patterns

Mi segno questo riferimento con allegato catalogo on-line di pattern e best practices: http://xunitpatterns.com/

Italian Agile Day 2006, il 1° Dicembre

Ne avrete sicuramente sentito già parlare. Neanche quest'anno mancherò ;-) Sul sito ufficiale ci sono tutti i dettagli, allego qui un abstract. _______________________________Italian Agile Day 2006!Venerdi 1 Dicembre 2006 si terrà a Milano il terzo Italian Agile Day. Si tratta di una conferenza gratuita di un giorno dedicata alle metodologie Agili per lo sviluppo e la gestione dei progetti software rivolta agli sviluppatori, project leaders, IT managers, tester, architetti e coach che hanno esperienze da condividere o che iniziano solo ora ad interessarsi a queste tematiche. La giornata ha come obiettivo la conoscenza pratica, le esperienze sul campo e un attivo...

Architettura : ma serve davvero ?

Qual'è la differenza tra scrivere codice con un disegno ed una architettura chiara e adeguata alle esigenze e scrivere codice "piatto" senza disegno ne arhitettura ? Non è una domanda da poco visto che è la prima che il management si pone per decidere se investire o meno. Ho ritrovato per caso questo codice            http://www.luca.minudel.it/datatableeditor/ che con uno user control ad-hoc (leggi trusco, trucco, scorciatoia) e poche righe di codice+configurazione (leggi nessun disegno o architettura) punta a realizzare le "stesse" feature per l'utente di quest'altro prestigioso (leggi con un ottimo disegno ed architettura) progetto:             http://www.codeplex.com/Wiki/View.aspx?ProjectName=NSK Il primo richiede pochissima programmazione e pochissimo tempo, il secondo una invidiabile competenza...

Quality Assurance: Classico, Agile e Lean

La Quality Assurance nello sviluppo del software classico, agile e lean: QualityAssuranceAgile Fonte: Lean Agile Straight Talk podcast, episodio QA AS PROCESS IMPROVEMENT IN LEAN-AGILERiferimenti Utili:- The Toyota Way- Lean Software Developmen- Lean & Six Sigma    

Rubriki: i pattern più popolari del 2006

Questi sono i pattern più popolari del wiki di UGIdotNET cioè i 10 più visitati da gennaio 2006: Pattern Factory Method (*) Pattern Observer (*) Pattern Singleton (*) Pattern Proxy (*) Pattern Command (*) Pattern Facade Pattern Abstract Factory Pattern Mediator (*) Pattern Adapter Pattern Iterator (*) tra cui ci sono appunto i 7 (*) design pattern più...

La mappa degli agilisti italiani

http://www.frappr.com/italianagilemovement Ci sono anch'io. Fonte: http://blogs.ugidotnet.org/nicolacanalini   Tags :  Team Work | Agile |

Programmare senza ego: linee guida

  Renditi conto che commetterai degli errori e accettalo. The point is to find them early, before they make it into production. Fortunately, except for the few of us developing rocket guidance software at JPL, mistakes are rarely fatal in our industry, so we can, and should, learn, laugh, and move on. Non sei il codice che scrivi, ne quello che hai scritto ne quello che scriverai Remember that the entire point of a review is to...

Il software come conoscenza in compresse

Mentre studiavo algebra imparai un teorema con una dimostrazione lunga 2 facciate, negli esercizi tra le note curiose scoprii che un secolo prima lo stesso teorema per essere dimostrato aveva richiesto 10 e più libri. Ora come allora la conoscenza che quel teorema portava era la medesima, ma allora trasmettere, comunicare o elaborare quella conoscenza richiedeva una quantità d'informazione estremamente più grande che oggi (10 libri contro 2 facciate).   Quando lo sviluppatore realizza una soluzione informatica ad un problema passa attraverso diverse fasi, dal problema alla sua soluzione sino alla implementazione del software in momenti successivi di analisi e sintesi sino al rilascio definitivo della versione ufficiale...

The Toyota way

Annoto alcuni spunti dal pdf segnalato qui da Antonio con l''intento di migliorarmi su questi temi: Fai galleggiare la barca sulla superfice (il flusso di lavoro e i processi) Rendi e mantieni sempre evidente il flusso (del lavoro, del processo) e fa in modo che sia noto ed evidente a tutti attraverso la tua cultura aziendale Crea un flusso che muove insieme materiali e informazioni (per me applicazioni e codice, dati applicativi e conoscenza del dominio) e che lega il processo...

Pair Programming: la diversità dei pair è una ricchezza

Due sviluppatori in pair che approcciano la rappresentazione del problema e la  soluzione in modo diverso e che hanno formazione diversa possono ottenere risultati nettamente superiori a una coppia in pair di programmatori molto capaci (specializzati sul problema) ma molto simili tra loro. Questa è l'idea che mi è venuta leggendo questo articolo:   Groups of diverse problem solvers can outperform groups of high-ability problem solvers   Fonte: http://www.pnas.org/cgi/content/full/101/46/16385 ...We find that when selecting a problem-solving team from a diverse population of intelligent agents, a team of randomly selected agents outperforms a team comprised of the best-performing agents. This result relies on the intuition that, as the initial pool...

Quiz sulle metodologie Agili ed eXtreme Programming: le risposte che mi sono dato

Dopo aver riflettuto sulle domande ed aver letto i feedback al post precedente ecco le risposte che ad oggi mi sono dato: In generale il committente (il reparto che ha richiesto un software) e la software factory (il reparto che realizzarà il software) hanno l'obiettivo comune di concludere il progetto con successo, il confine che vedo separa ciò che porta alla riuscita del progetto da ciò che lo ostacola. D: Che differenza c'è tra adattarsi alle richieste del cliente e subire le richieste del cliente? R: Metafora. Il passeggero è salito in Taxi verso l'aeroporto per prendere il volo che a breve...

Quiz sulle metodologie Agili ed eXtreme Programming

Ecco alcune domende che mi sono posto nell'ambito delle metodologie agili ed XP. Cosa ne pensate ? Che differenza c'è tra adattarsi alle richieste del cliente e subire le richieste del cliente? Che differenza c'è tra essere agili ed improvvisare? A volte è più facile cambiare il mondo che ... C:/> _ Tags :  Team Work | Agile | Pratiche | Cliente |

A caccia di un tool di metriche

Sono a caccia di un tool per raccogliere metriche del codice OO. L'uso che ne devo fare è molto pratico e concreto, consiste nel usare le mertiche per trovare risposte sulla direzione in cui investire energie per raggiungere certi obiettivi ben precisi (es. ridurre i tempi di realizzazione di una evoluzione o di un fix migliorando la comprensibilità del codice, ridurre i bug, semplificare gestione e le build riducendo le dipendenze, ...). Il contesto in cui questo tool deve essere usato è veloce e molto competitivo, per questo spero di trovare un tool che abbia tulle le qualità ideali: integrato a VS.NET e facile da configurare ed...

TypeMock.NET

Oggi ho fatto una breve sessione in Pair Programming con Antonio in cui abbiamo applicato il TDD per risolvere dei dubbi di disegno su come sostituire ad una applicazione la funzione di salvataggio in XML dei dati di configurazione. Ben presto è emersa l'utilità di usare un mock object per poter testare separatamente la rappresentazione dei dati dalla sua persistenza.  Questa è stata l'occasione per me per conoscere TypeMock.NET (tool commerciale a pagamento). TypeMock.NET rispetto ad altre librerie di mock object come ad esempio NMock ha un pregio che mi ha subito colpito e conquistato nonostante non sia open-source: permette di fare il Mock di ogni classe senza i vincoli tipici...

Come proteggere una class library rendendola accessibile ai soli assembly firmati

Così come il più noto attributo StrongNameIdentityPermission che autorizza solo gli Assembly con un dato strong name a richiamare una library (tutta intera, solo alcune classi o solo alcuni metodi) c'è anche l'attributo PublisherIdentityPermission che autorizza in base al certificato (X.509 v.3 Software Publisher's Certificate) dell'assembly chiamante. I tool di .NET makecert.exe, cert2spc.exe e permettono di creare un certificato di test e la relativa chiave privata necessaria a creare un Assembly ed il tool signcode.exe permette infine di firmare l'assembly chiamante con il certificato. Ad esempio:     makecert -sv CertPrivateKey.pvk Cert.cer    cert2spc Cert.cer Cert.spc    signcode /spc Cert.spc /v CertprivateKey.pvk AssemblyChiamante.exeIl seguente codice...

AgileDay 2005

Anche quest'anno ho assistito all'AgileDay, lo  seguo con molto interesse per affinare le mie conoscienze delle metodologie agili da cui mi faccio aiutare e guidare nel lavoro in team e nell'utilizzare tool e tecnologia per la buona riuscita dei progetti. La sera prima c'è stata una divertente cena di geeks (il presidente Andrea Saltarello si è esibito nel refactoring della serata in perfetto sitile Agile) impreziosita dalla presenza del gentil sesso e da un simpatico provocatore che ha contribuito ad ampliare il dialogo oltre i temi dell'informatica. Il viaggio di andata e ritorno con Riccardo Golia è stato come sempre un'ottima occasione per confrontarci sulla applicazione delle metodologie agili e sul nostro...

Una critica a Code Complete di Steve McConnell

Riporto qui una critica che ho letto, resta valida anche per la 2nda edizione?

XP e User Stories, per noi e per Microsoft

Conclusioni Il problema: 1 mese di tempo per MS per inserire dentro il build complessivo del prodotto una aggiunta fatta da una divisione di sviluppo del prodotto. La causa: l'elevato numero di persone necessarie al team e del prodotto. La soluzione: organizzare le divisioni di sviluppo/build assegnando ad ogniuna la prossima singola funzionalità (User Story) da rilasciare, arrivare per ogni divisione ad un build giornaliero e quindi ridurre (a 1 settimana?) il tempo di attesa per il build complessivo del prodotto. Il fatto interessante L'integrazione continua è utile per poter giungere a build giornalieri fatti in pochi minuti, è un ingrediente ma ne servono anche altri. Và beh, cosa nota. Organizzare il lavoro del...

I tool di refactoring: quale usare?

Ho in previsione di fare un uso maggiore del Refactoring riducendo il disegno up-front e quindi mi cerco di capire su che tool orientarmi x VS2005. La mia esperienza su Resharper è documentat qui: http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/Refactoring.html#StrumentiDiRefactoring Avete usato altri Tool di Refactoring, quala consigliereste?  

Nomi di classi, metodi, namespace, etc. Italiano o Inglese?

Nella sezione NamingGuidelines curata da Fabio Cozzolino si è aperta una "diatriba" ancora irrisolta qui: http://wiki.ugidotnet.org/default.aspx/UGIdotNETWiki/NamingGuidelines.html#NamingIssues Argomentazioni pro e contro utili per arrivare a stendere una linea guida definitiva sulla denominazione di namespace/classi/metodi/... in italiano o inglese sono gradite ;-)

Manuale pratico di Wiki numero 6 (ultimo): Inseguire le modifiche sul Wiki

  Per inseguire le modifiche sul wiki puoi: Iscriverti al Rss Feed cliccando nel menu a sinistra alla voce Sottoscrizioni Visualizzare le ultime modifiche in ordine di tempo cliccando nel menu a sinistra alla voce Modifiche Recenti Per non farti sfuggire nulla puoi: Cercare una specifica parola o frase nel wiki nella sezione Cerca sotto il menù Trovare tutti i punti in cui la pagina corrente è citata cliccado nel menù a sinistra la voce 'Cerca Riferimenti' Per ogni altro dubbio c'è il WikiHelpDesk

Manuale pratico di Wiki numero 5: Creare nuove pagine

X aggiungere una nuova pagina al wiki ci sono almeno due modi diversi. Il primo modo è alla Scegli la pagina del Wiki sulla quale vuoi porre il link al nuovo argomento Trova un NomeArgomento adatto Vai in modifica della pagina e scrivi il nuovo nome argomento in pascal case Salva la pagina Ora il nuovo nome argomento apparirà con una sottolineatura tratteggiata: Clicca sul nuovo nome argomento Ora sei in modifica della nuova pagina, basta inserire il testo che desideri, tipicamente in StileDocumentale, e quindi salva Il secondo modo è alla Vai in una pagina qualunque del wiki Clicca in alto sul titolo blu a questo punto comparirà il messaggio: Digita il nome...

Manuale pratico di Wiki numero 4: Contribuire al Wiki

Il contenuto del Wiki è molto "Agile" : cambia continuamente al ritmo delle persone che vanno e vengono modificandolo, dell'esperienza che cresce e delle opinioni che cambiano. E' il momento di fare pratica su strada, la PaginaPerFarPratica ora non ci serve più, SeiInvitatoAModificareIlWiki:  Su UGIdotNETWiki trovi una lista di argomenti trattati dai precedenti visitatori, naviga e scegli un argomento che ti interessa Entra in modifica della pagina Posizionati alla fine per lasciare il tuo commento (se trovi l'argomento interessante, se lo trovi completo o se ci sono parti mancanti, se è chiaro quello che è scritto, se concordi con la tesi sostenuta, etc.) Se vuoi inserire un nuovo commento tira una riga dritta digitando:----e...

Manuale pratico di Wiki numero 3: Firmarsi sul Wiki

Il contenuto del Wiki è un work-in-progress in continua evoluzione. Il Wiki si affianca a Forum, Blog, Articoli, Tips e Newsletter di UGI ed è adatto per ospitare i contenuti in modo visibile e permanente che desideriamo via via strutturare, organizzare, discutere e affinare facilmente e in modo veloce. Con il Blog è possibile dare visibilità ai propri contenuti sul Wiki e invitare al commento/confronto e alla partecipazione i propri lettori. Anche per questo è utile dare visibilità ai propri contenuti sul Wiki firmandoli.Walkthrough: crea la tua home page sul Wiki: - Vail alla pagina delle Home Page sul Wiki qui: HomePageSulWiki - Entra in modifica...

Manuale pratico di Wiki, numero 2

Ogni pagina del Wiki rappresenta un argomento trattato dal Wiki ossia un concetto: 1 pagina = 1 argomento = 1 concetto. In una pagina un concetto inserito in precedenza nel Wiki  può essere citato = linkato scrivendo il nome argomento in PascalCase. Le regole per scrivere e formattare il testo nel Wiki sono semplici, veloci da imparare e da usare. In ogni caso quando sei in modifica in una pagina, su lato destro c'è il riquadro che riporta le formattazioni più comuni: - Entra im modifica della pagina di prova - Clicca su 'Show tips....' nel riquadro a destra - Nota la descrizione delle...

Manuale pratico di Wiki, numero 1

Il WikiWiki è una ragnatela di pagine tra loro correlate, ecco un Walkthrough su come scrivere nelle pagine di UGIdotNETWiki: Apri la pagina di prova PaginaPerFarPratica Entra in modalità di modifica con il bottone Modifica o col doppio click Nel grande riquadro editabile indica una breve descrizione del contenuto della pagina scrivendo:Summary: Esercizio di realizzazione del Walkthrough. Vai a capo e scrivi:Questo è un esempio di scrittura nelle pagine del Wiki con gli stili più comuni come il '''grossetto''' e il ''corsivo o italico'' che dir si voglia. Mentre il +sottolineato+ non si usa spesso perché si potrebbe confondere con un link ;-) Visualizza l'anteprima della pagina...

Manuale pratico di Wiki, numero zero

In attesa della prossima iniziativa su UGIdotNETWiki (grazie a Riccardo e Roberto) mi sono deciso a postare un breve manuale (estremamente) pratico del Wiki. Bando alla chiacchiere, ecco le info preliminari per cominciare. Per andare in modifica di una pagina clicca sulla barra sinistra il comando Modifica: oppure fai doppio-click nel mezzo della pagina.Quando sei entrato in modifica, sulla barra destra hai a disposizione i comandi per Salvare, Annullare e per avere l'Anteprima della pagina modificata: mentre sul lato sinistro puoi editare il testo. Prova su questa pagina cavia. I comandi saranno utili nel prossimo Walkthrough.

Strong-Typing o Weak-Typing? La discussione prosegue

Grazie al contributo di Lorenzo la discussione tra pro e contro della tipizzazione forte e di quella debole è proseguita ed entrata nel dettaglio. Mi sembra che l'argomento sia stato sviscerato in modo chiaro e comprensibile cioè in modo tale da non rimanere astratto ma da avere una chiara relazione con le righe di codice .NET che scriviamo. Se qualche dubbio resta, qualche domanda o considerazione su casi specifici potrebbe aiutare, basta accodarla qui: TipizzazioneForteODebole.

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 ...