tag:blogger.com,1999:blog-55026817892859061662024-03-04T21:25:15.979-08:00Timo's blogI write because I'm bad at remembering...Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comBlogger144125tag:blogger.com,1999:blog-5502681789285906166.post-62243200372558209452020-06-10T06:33:00.000-07:002020-06-10T06:33:21.301-07:00Tale: ETL component<div>In this occasion we will see a situation that unexpectedly generated a great design, by purpose and by accident as well.</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdf9ryqwpRGgtGSvjdJE2umLvcKNCHGThsfww52gsaOU8N9l8c_Bu1OLQpZ-cYXSz-umBpQmvMzCMmWrDGLg-5Bdk-nJV0YohSozFHCk8Wlx1-hCJ1jA_xyMk-Ul1UR-_-jWu5XZCo-dA/s1122/case_study_3_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Problem" border="0" data-original-height="453" data-original-width="1122" height="258" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhdf9ryqwpRGgtGSvjdJE2umLvcKNCHGThsfww52gsaOU8N9l8c_Bu1OLQpZ-cYXSz-umBpQmvMzCMmWrDGLg-5Bdk-nJV0YohSozFHCk8Wlx1-hCJ1jA_xyMk-Ul1UR-_-jWu5XZCo-dA/w640-h258/case_study_3_01.png" title="Problem" width="640" /></a></div><div>Here we've had a customer with a legacy system that stored all its data in a local data source, this is a very old system, written in <a href="https://en.wikipedia.org/wiki/Fortran">Fortran</a>, that handles huge amounts of data and it's rarely updated.<br /><br />As we can already expect, this is not a simple system to integrate with external participants, and that was exactly what they needed. A partner had a website that was well done and wanted to integrated with the legacy system data, meaning that data could be fetch from that system and updated as well.<br /></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvCT0p4a0NoNTyXkq9JqnojGS_em_Rfqw_SID726tJAotUU0Eb7trsFoeZmHM2LHw4QQCMEKcr49tSuX8VzFkQiUfqW8kVoLL_Njh_GOF02YTaazTR-J8pUWrtGU0ZDTjEnEKKscCg4-4/s1163/case_study_3_02.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Proposed solution - draft 1" border="0" data-original-height="443" data-original-width="1163" height="244" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvCT0p4a0NoNTyXkq9JqnojGS_em_Rfqw_SID726tJAotUU0Eb7trsFoeZmHM2LHw4QQCMEKcr49tSuX8VzFkQiUfqW8kVoLL_Njh_GOF02YTaazTR-J8pUWrtGU0ZDTjEnEKKscCg4-4/w640-h244/case_study_3_02.png" title="Proposed solution - draft 1" width="640" /></a></div><div><br /></div><div>Our team was asked to provide a solution for this scenario, and here comes out handy the figure of an Architect, we were a young team, with very few years of experience and almost no insight on what to do next.<br /><br />The Architect took the lead, he designed an <a href="https://en.wikipedia.org/wiki/Extract,_transform,_load">ETL</a> (Extract/Transform/Load) component that would act as a mediator between the systems, it would read data from the legacy system and synchronize it to the partner web system, and consequently it would take the data from the partner web system and synchronize it back to the legacy system.<br /><br />The behavior was designed in this way because the legacy system couldn't be disrupted, a single misbehavior could take the system down, synchronous communication was out of the picture, everything needed to be asynchronous to ensure a stable integration.<br /></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZJ62u-3tFtZGYbans1SukckLDbCbXnohaLGo3msf7FL_iy2TZTkzmkE0xMoTLDXkSl205jglWGrMOjBnlmgy9yoTjLvGzu85m5AFCfKJNOWqHnTMTtmsRAXZsN-FnGvFLkmagWPPfwjI/s1280/case_study_3_03.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Solution - state 1" border="0" data-original-height="767" data-original-width="1280" height="384" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZJ62u-3tFtZGYbans1SukckLDbCbXnohaLGo3msf7FL_iy2TZTkzmkE0xMoTLDXkSl205jglWGrMOjBnlmgy9yoTjLvGzu85m5AFCfKJNOWqHnTMTtmsRAXZsN-FnGvFLkmagWPPfwjI/w640-h384/case_study_3_03.png" title="Solution - state 1" width="640" /></a></div><div>Our team worked well and delivered the first ETL to production with some small issues, but worked well, the synchronization process between the Legacy and the External partner was performed every two hours and worked really well.<br /></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVyZ2WbUSegSMoTfDFoa-dMqmn1BfskUxs1CURITOQ7bx0pLkTBlLsl7aAOlFOvMjJksSB4PMiQEFAiidn5oHSfYvMbp-PpG8wv93VX7z_9S6LP4DAgrvqgu2G674l6w87CKI3aZTiQis/s1452/case_study_3_04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Problems in legacy" border="0" data-original-height="798" data-original-width="1452" height="352" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVyZ2WbUSegSMoTfDFoa-dMqmn1BfskUxs1CURITOQ7bx0pLkTBlLsl7aAOlFOvMjJksSB4PMiQEFAiidn5oHSfYvMbp-PpG8wv93VX7z_9S6LP4DAgrvqgu2G674l6w87CKI3aZTiQis/w640-h352/case_study_3_04.png" title="Problems in legacy" width="640" /></a></div><div><br /></div><div>But after a few weeks in production the customer and owner of the Legacy system saw a problem, the amount of data changed by the External partner was huge compared to their normal changes rate, the Legacy system was getting slower because of this integration and data synchronization.<br /><br />Their Legacy system had a great feature for this scenario, they've created a Replica environment that worked for read-only data (which amounted to 90% of the operations) and the original system where data could be written. The new schema solved the problem on their side, but the ETL needed to be updated, it needed to look now at 2 different data sources, with different behaviors.<br /><br />Our team's Architect took the lead again, he said: "the ETL remains unchanged, we will fix this in the wire". His decision was to put queues in front of the ETL to handle the data traffic, and install agents in the Legacy systems and the External partner system, this agent would monitor the data and communicate with the queues with structured messages, asking for data (read) or performing a data modification (write).<br /><br />The changes were done in two weeks, the performance remained the same, the ETL performed consistently without changing a line of code, the Legacy system's load was controlled and the External system worked really well and fast.<br /></div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkRD1I6374xnqwkO55cyrzS20I7Jr2WeUjxpawy9bgWJA0ELsJv7F1WEnLIsWABd6ZOaXPHai7lEChmIuhil14mbpj7-krS33NqQomKGezO8XnrkhPPVMMl9tdvQIj8ChWOyW_vGEgRHk/s1463/case_study_3_05.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img alt="Final setup" border="0" data-original-height="759" data-original-width="1463" height="332" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkRD1I6374xnqwkO55cyrzS20I7Jr2WeUjxpawy9bgWJA0ELsJv7F1WEnLIsWABd6ZOaXPHai7lEChmIuhil14mbpj7-krS33NqQomKGezO8XnrkhPPVMMl9tdvQIj8ChWOyW_vGEgRHk/w640-h332/case_study_3_05.png" title="Final setup" width="640" /></a></div><div><br /></div><div><b>Backwards Analysis</b><br /><br />Thinking back, the project went really well, the development process was smooth, integration was simple and a lot of things that usually go wrong were avoided. Many of these benefits are related to some key decision made by the Architect for the beginning:<br /><br /><ul style="text-align: left;"><li>Functional programming as main development paradigm</li><li>Automated test covering critical cases</li><li>Periodical automated build</li><li>Asynchronous communication </li><li>Ensured communication channel<br /></li></ul><br /></div>Timoteo Poncehttp://www.blogger.com/profile/06526621295419234532noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-34576337486564368322020-06-04T07:16:00.001-07:002020-06-04T07:16:57.750-07:00About software development methodologies<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
A while ago I've sent a question to <a href="https://en.wikipedia.org/wiki/Jim_Coplien">James Coplien</a>, one of the loudest voices of software development processes, methodologies and design.</div>
<blockquote class="tr_bq">
<span style="color: black; display: inline; float: none; font-family: "helvetica"; font-size: 12px; font-style: normal; font-weight: normal; letter-spacing: normal; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Hello mister Coplien.</span><br />
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<br /></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
After some meetings regarding working processes and working methodologies for software, we've reached a point on asking what are the alternatives to the most know approaches (waterfall and agile processes).</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<br /></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
Our group consists of people actively working on software development, testers, students, and college teachers. So, from our limited experience, we couldn't list too many approaches; we ended up with a commitment of digging into the topic and share our findings in our next meetings.</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<br /></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
That's why I would be super thankful if you could recommend some resources (articles/books) on software development processes/methodologies.</div>
</blockquote>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
To my surprise, he replied back with a great explanation: <br />
<div class="" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<br class="" /></div>
<blockquote class="tr_bq">
<div class="" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<span style="color: black; display: inline; float: none; font-family: "helvetica"; font-size: 12px; font-style: normal; font-weight: normal; letter-spacing: normal; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Hej, Juan,</span>Thanks for writing.</div>
<div class="" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<br class="" /></div>
<div class="" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
First: just to pick nits, “methodology” is a branch of philosophy which is the study of<span class="Apple-converted-space"> </span><i class="">method</i>. Technically, things like waterfall and XP are methods and not methodologies. Alistair Cockburn, who has developed a theory of software engineering, playfully likes to call himself a “methodist” rather than a “methodologist.”</div>
<div class="" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<br class="" /></div>
<div class="" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
A<span class="Apple-converted-space"> </span><i class="">method</i><span class="Apple-converted-space"> </span>is therefore a pre-packaged set of practices and processes suitable to design and implementation. One of the great learnings of the 20th century is that method doesn’t work. The architect Christopher Alexander has been one of the leaders of the Design Movement since about 1968, and is very familiar with the notion of method. He writes:</div>
<div class="" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<br class="" /></div>
<blockquote class="" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border: none; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; margin: 0px 0px 0px 40px; orphans: auto; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<div class="">
<i class="">No one will become a better designer by ... following any method blindly... if you try to understand the idea that you can create abstract patterns by studying the implication of limited systems of forces, and can create new forms by free combination of these patterns—and realize that this will only work if the patterns which you define deal with systems of forces whose internal interaction is very dense, and whose interaction with the other forces in the world is very weak—then, in the process of trying to create such diagrams or patterns for yourself, you will reach the central idea of which this book is all about.<span class="Apple-converted-space"> </span></i>— Christopher Alexander, “Notes on Synthesis of Form,” 1974</div>
</blockquote>
<br class="" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;" />
<div class="" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
So it is not a matter of choosing between alternative potential approaches, but rather of transcending the whole framework of reducing design to method. No more than Michelangelo followed any method in making the statue of David or of painting the roof of the Sistine Chapel will method help any technical design activity.</div>
<div class="" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<br class="" /></div>
<div class="" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
Even within the framework of<span class="Apple-converted-space"> </span><i class="">agile</i>, there are those that believe that Man can triumph over the complexity of nature and that they can prevail using some method. XP is a very old example. SaFE is a newer example. The things that work dismiss this claim and open the doors to self-organization and feedback. That is true agile. True agile is incompatible with the fundamental notions of<span class="Apple-converted-space"> </span><i class="">method</i>.</div>
<div class="" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<br class="" /></div>
<div class="" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
This is why I am an advocate of Scrum. Scrum is not a method but rather a framework. If you want to explore the method space I’d recommend exploring Crystal and the works of Alistair Cockburn. Scrum and Crystal aren’t the only ones. But to find anything effective for complex development you must abandon<span class="Apple-converted-space"> </span><i class="">method</i>.<span class="Apple-converted-space"> </span><i class="">Method</i><span class="Apple-converted-space"> </span>is good for simple and merely complicated work — not for complex work.</div>
<div class="" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<br class="" /></div>
<div class="" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
What you have read is aa OK start, but I think you are exploring noise and need to dig deeper into some of the underlying theory before looking at experience reports like<span class="Apple-converted-space"> </span><i class="">Scrum from the Trenches</i>. If you want to know Scrum in depth, then get the new “A Scrum Book” (<a class="" href="https://pragprog.com/book/jcscrum/a-scrum-book">https://pragprog.com/book/jcscrum/a-scrum-book</a>). That will help you understand Scrum. But Scrum is not a method, and I think you need to come to grips with the scope within which<span class="Apple-converted-space"> </span><i class="">method</i><span class="Apple-converted-space"> </span>works. Maybe you even need to come to grips with the taxonomy of design within which<span class="Apple-converted-space"> </span><i class="">method</i><span class="Apple-converted-space"> </span>is historically a relatively small part. Therefore, I recommend getting these books as well:</div>
<div class="" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<br class="" /></div>
<blockquote class="" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; border: none; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; margin: 0px 0px 0px 40px; orphans: auto; padding: 0px; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<div class="">
<i class="">Design after Modernism: Beyond the Object</i>, by John Thackara (<a class="" href="https://www.amazon.com/gp/offer-listing/0500234833/">https://www.amazon.com/gp/offer-listing/0500234833/</a>)</div>
<div class="">
<br class="" /></div>
<div class="">
<i class="">Developments in Design Methodology,</i><span class="Apple-converted-space"> </span>by Nigel Cross (<a class="" href="https://www.bookdepository.com/Developments-Design-Methodology-Nigel-Cross/9780471102489">https://www.bookdepository.com/Developments-Design-Methodology-Nigel-Cross/9780471102489</a>)</div>
<div class="">
<br class="" /></div>
<div class="">
<i class="">Notes on the Synthesis of Form</i>, by Christopher Alexander, 1974 printing (<a class="" href="https://www.amazon.com/Notes-Synthesis-Form-Harvard-Paperbacks/dp/0674627512/ref=sr_1_fkmrnull_1">https://www.amazon.com/Notes-Synthesis-Form-Harvard-Paperbacks/dp/0674627512/ref=sr_1_fkmrnull_1</a>)</div>
</blockquote>
<div class="" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<br class="" /></div>
<span style="color: black; display: inline; float: none; font-family: "helvetica"; font-size: 12px; font-style: normal; font-weight: normal; letter-spacing: normal; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">There are many more, but this is a start. From where you seem to be at, you have many years of work to do before coming to any conclusion.</span></blockquote>
</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
At this point, <a href="https://en.wikipedia.org/wiki/Alistair_Cockburn">Alistair Cockburn</a> (participant on the Agile Manifesto) got involved, and provided a lengthy response:</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
</div>
<blockquote class="tr_bq">
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<span style="background-color: white; color: black; display: inline; float: none; font-family: "helvetica"; font-size: 12px; font-style: normal; font-weight: normal; letter-spacing: normal; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">hi, Juan, Cope,<span class="Apple-converted-space"> </span></span><br />
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
I rarely like to disagree with Cope, but he is wrong twice here, and putting words in my mouth, so I feel somewhat obliged to step in. I'm afraid this is a long discussion, but one in which I have invested considerable research. Nothing of what I am about to say is "off the cuff".<span class="Apple-converted-space"> </span></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
First because it is easiest : I am a methodologist, not a methodist. The "-ologist" refers unambiguously to "person who studies --".?? I study methods and methodologies (explanation of the 'methodology' in long form below).?? I am not a methodist, and never refer to myself as such. A methodist is not a studier of, he is a person who follows the rules of the method, in particular, a very rigid form of Christianity. So if I am anything, it is not a methodist :).</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
For those who wish to be pure, that "-ology" means "study of", I then insist that I am a "technologist" because my field is "technology", the study of techniques. Until the users of the English language repair the word "technology" to mean, as they imply from the suffix "-ology", study of techniques, then I feel no obligation to honor the false appeal to ancient Greek etymology for "methodology". But more on that in a moment. I am a "technologist" (studying techniques") or a "methodologist" (studying methods and methodologies), but not a "methodist" (a particular, very formulaic Christian religion)</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<br /></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
For the second, "Methodology", Cope makes the usual vague reference to a false etymology based on ancient greek. For my PhD dissertation, I had to take on this question, I researched and tracked this word over a period of years and using different dictionaries.<span class="Apple-converted-space"> </span></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
It is best that I don't try to re-write that research, but rather, show you that section of my PhD dissertation.<span class="Apple-converted-space"> </span></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<br /></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<br /></div>
<a href="https://www.blogger.com/null" name="_Toc10563846" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;"></a><a href="https://www.blogger.com/null" name="_Toc5788411" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">1.1 Clarification of Words</a><span style="background-color: white; color: black; display: inline; float: none; font-family: "helvetica"; font-size: 12px; font-style: normal; font-weight: normal; letter-spacing: normal; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"></span><br />
<div class="MsoNormal" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; caret-color: rgb(0, 0, 0); color: black; font-family: "Times New Roman", serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; margin: 3pt 0in; orphans: auto; text-align: justify; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
With the word<span class="Apple-converted-space"> </span><i>methodology</i><span class="Apple-converted-space"> </span>being used in different ways by various writers, and often interchanged with the word<span class="Apple-converted-space"> </span><i>method</i>, I must clarify my use of the words in order for the rest of the thesis to make sense.<span class="Apple-converted-space"> </span></div>
<h3 style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; break-after: avoid-page; caret-color: rgb(0, 0, 0); color: black; font-family: Arial, sans-serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; letter-spacing: normal; margin: 12pt 0in 6pt; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
Methodology</h3>
<div class="MsoNormal" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; caret-color: rgb(0, 0, 0); color: black; font-family: "Times New Roman", serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; margin: 3pt 0in; orphans: auto; text-align: justify; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
My use of the word comes from two sources: the Merriam-Webster Dictionaries and common usage among large contract software houses.</div>
<div class="MsoListBullet" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; caret-color: rgb(0, 0, 0); color: black; font-family: "Times New Roman", serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; margin: 3pt 0in 3pt 0.25in; orphans: auto; text-align: justify; text-decoration: none; text-indent: -0.25in; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<span style="font-family: "symbol";">??????????????<span class="Apple-converted-space"> </span></span>The (U.S.-based) Merriam-Webster dictionaries list as their first definition: "A series of related methods or techniques."<span class="Apple-converted-space"> </span></div>
<div class="MsoListBullet" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; caret-color: rgb(0, 0, 0); color: black; font-family: "Times New Roman", serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; margin: 3pt 0in 3pt 0.25in; orphans: auto; text-align: justify; text-decoration: none; text-indent: -0.25in; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<span style="font-family: "symbol";">??????????????<span class="Apple-converted-space"> </span></span>When I sat in a discussion of methodology with a group of senior consultants from Coopers & Lybrand, Ernst & Young, Andersen Consulting, and the IBM Consulting Group, one of them stood up and said (words to the effect of): "Let's get clear what we mean by methodology. It is the roles, teams, skills, processes, techniques, tools, and standards used by the project team." The others in the room nodded their heads, and the meeting proceeded. As one of the senior consultants later told me, "If it is what one or two people do while working on a task, it is technique. If it is what the team uses to coordinate their work, then it's methodology."</div>
<div class="MsoNormal" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; caret-color: rgb(0, 0, 0); color: black; font-family: "Times New Roman", serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; margin: 3pt 0in; orphans: auto; text-align: justify; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
Those two meanings of the word are congruent and match the common use of the word.<span class="Apple-converted-space"> </span></div>
<div class="MsoNormal" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; caret-color: rgb(0, 0, 0); color: black; font-family: "Times New Roman", serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; margin: 3pt 0in; orphans: auto; text-align: justify; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
Many British and continental European speakers dislike the above definition, preferring to use the word<span class="Apple-converted-space"> </span><i>method</i><span class="Apple-converted-space"> </span>instead. They cite the (U.K.-based) Oxford English Dictionary, which in the early 1990s contained only one entry for<span class="Apple-converted-space"> </span><i>methodology</i>: "study of methods." This explains the cultural difference in usage. However, the 1995 Oxford English Reference Dictionary includes in the entry for<span class="Apple-converted-space"> </span><i>methodology</i>: "2. a body of methods used in a particular branch of activity." Both American and British dictionaries now agree on the subject.</div>
<h3 style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; break-after: avoid-page; caret-color: rgb(0, 0, 0); color: black; font-family: Arial, sans-serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; letter-spacing: normal; margin: 12pt 0in 6pt; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
Method</h3>
<div class="MsoNormal" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; caret-color: rgb(0, 0, 0); color: black; font-family: "Times New Roman", serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; margin: 3pt 0in; orphans: auto; text-align: justify; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
The Merriam-Webster dictionaries define<span class="Apple-converted-space"> </span><i>method</i><span class="Apple-converted-space"> </span>as a "systematic procedure"; that is, similar to a technique. This matches the way many European speakers and European research literature uses the word<span class="Apple-converted-space"> </span><i>method</i>. An example, from Mathiassen (1998), is the following:</div>
<div class="MsoNormalIndent" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; caret-color: rgb(0, 0, 0); color: black; font-family: Arial, sans-serif; font-size: 10pt; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; margin: 3pt 0in 3pt 0.3in; orphans: auto; text-align: justify; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<u>Lesson 2:</u><span class="Apple-converted-space"> </span>Methods are primarily frameworks for learning.</div>
<div class="MsoNormal" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; caret-color: rgb(0, 0, 0); color: black; font-family: "Times New Roman", serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; margin: 3pt 0in; orphans: auto; text-align: justify; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
The intention behind Mathiassen's word<span class="Apple-converted-space"> </span><i>method</i><span class="Apple-converted-space"> </span>is quite different from my intention for the word<span class="Apple-converted-space"> </span><i>methodology</i>. Mathiassen writes<span class="Apple-converted-space"> </span><i>method</i><span class="Apple-converted-space"> </span>to connote what one or a few people are learning to use, usually as a technique. This learning eventually disappears into the background skill set of the practitioner.<span class="Apple-converted-space"> </span></div>
<div class="MsoNormal" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; caret-color: rgb(0, 0, 0); color: black; font-family: "Times New Roman", serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; margin: 3pt 0in; orphans: auto; text-align: justify; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
In contrast, I write<span class="Apple-converted-space"> </span><i>methodology</i><span class="Apple-converted-space"> </span>to connote the conventions people agree to across the team (including development techniques). While the techniques disappear into each person's skill set, the conventions in play do not disappear into skill sets.<span class="Apple-converted-space"> </span></div>
<div class="MsoNormal" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; caret-color: rgb(0, 0, 0); color: black; font-family: "Times New Roman", serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; margin: 3pt 0in; orphans: auto; text-align: justify; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
We shall need both words to complete the discussion. This thesis primarily addresses methodology rather than method.</div>
<h3 style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; break-after: avoid-page; caret-color: rgb(0, 0, 0); color: black; font-family: Arial, sans-serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; letter-spacing: normal; margin: 12pt 0in 6pt; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
Shifts in Meaning</h3>
<div class="MsoNormal" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; caret-color: rgb(0, 0, 0); color: black; font-family: "Times New Roman", serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; margin: 3pt 0in; orphans: auto; text-align: justify; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
As the research took place over a ten-year period, there were several minor shifts in the way the word<span class="Apple-converted-space"> </span><i>methodology</i><span class="Apple-converted-space"> </span>got used, as well as some shifts in the way the practitioner community used the word. I deliberately leave in place some of those shifts, because readers will come to this thesis with their own personal interpretations, and part of the thesis topic is dealing with those personal interpretations.<span class="Apple-converted-space"> </span></div>
<div class="MsoNormal" style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; background-color: white; caret-color: rgb(0, 0, 0); color: black; font-family: "Times New Roman", serif; font-size: 11pt; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; margin: 3pt 0in; orphans: auto; text-align: justify; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
The first research question, for example, asks: "<b>Question 1:</b><span class="Apple-converted-space"> </span>Do we need yet another software development methodology, or can we expect a convergence and reduction at some point in time?" In this question, I do not mean just, "Do we need yet another set of<span class="Apple-converted-space"> </span><i>team conventions</i>, or can we expect a convergence and reduction at some point in time?" Rather, I accept the fluid way in which people ask the question, which often includes, "Do we need yet another software development<span class="Apple-converted-space"> </span><i>technique</i>, or can we expect a convergence and reduction at some point in time?" The answer that I develop responds to both versions of the question. Research question #2 is handled in a similarly liberal way.</div>
<span style="background-color: white; color: black; font-family: "helvetica"; font-size: 11pt; font-style: normal; font-weight: normal; letter-spacing: normal; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">However, by the time we reach the third question, "<b>Question 3:</b><span class="Apple-converted-space"> </span>How does the methodology relate to the people on the project?" the meaning narrows. It is quite a different question to ask, "How does a<span class="Apple-converted-space"> </span><i>technique</i>relate to the people on the project?" That question has to do with introducing techniques into groups, as well as the relation between technique-in-theory and techniques-in-practice (the latter topic being well discussed in the Scandinavian literature, see Ehn (1988) and Mathiassen (1998)). In the context of this inquiry, it is relevant to use the narrower meaning, "How do the<span class="Apple-converted-space"> </span><i>team conventions<span class="Apple-converted-space"> </span></i>relate to the people on the project and other aspects of life on the project?"??</span> </div>
</blockquote>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<br /></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
I found these replies and explanations extremely good, especially to someone trying to get more information about software development processes, so, I wanted to make them public because they might be useful for someone else.</div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
<br /></div>
<div style="-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; caret-color: rgb(0, 0, 0); color: black; font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-decoration: none; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px;">
Additionally, I've never expected a reply, it's great to know that knowledge can be shared and guidance can be provided despite the name, profession, location or expectations, thank you James and Alistair for your time.<br />
<br />
My recommendations:<br />
<ul>
<li><a href="https://www.youtube.com/watch?v=SxHqhDT9WGI">James Coplien on DCI</a></li>
<li><a href="https://www.youtube.com/watch?v=sr5wfygbY7k">Alistar Cockburn on The Heart of Agile</a></li>
</ul>
</div>
Timoteo Poncehttp://www.blogger.com/profile/06526621295419234532noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-27821911602158285602019-08-29T05:16:00.001-07:002019-08-29T05:16:36.897-07:00Bitbucket and Mercurial<br />
It has been recently announced that Bitbucket will be leaving Mercurial support in 2020 [1], defaulting to Git from then on.<br />
<br />
A lot of things come to mind when reading the announcement, mostly because Mercurial has been my first distributed revision control system or at least the first one I understood. It's fairly simple to use, concise and with a simple interface, but sadly has fallen in popularity.<br />
<br />
Git has won in other fields where popularity is more important that correctness and simplicity. If I would go back in time and choose between Git and Mercurial, I would still choose Mercurial, it's still a great tool.<br />
<br />
<br />
[1] <a href="https://bitbucket.org/blog/sunsetting-mercurial-support-in-bitbucket">https://bitbucket.org/blog/sunsetting-mercurial-support-in-bitbucket</a>Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-33701074349027811352019-06-05T08:19:00.000-07:002019-06-05T08:19:19.225-07:00Debugger usage as bad smell?<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgodQRtduHM6TkTiDyrBBbcO4gkP7krRRuSp35SiGj12r8r9f61scTb-6i2oKipL9Iu_K_Gyk7Oy3Yk45eJaA9XmmzXkItmsd_6UxCSVJpq70zh1oIdvwwzCGXoC3cwpWmSonH44YpF1ug/s1600/0.jpg" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="400" data-original-width="698" height="183" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgodQRtduHM6TkTiDyrBBbcO4gkP7krRRuSp35SiGj12r8r9f61scTb-6i2oKipL9Iu_K_Gyk7Oy3Yk45eJaA9XmmzXkItmsd_6UxCSVJpq70zh1oIdvwwzCGXoC3cwpWmSonH44YpF1ug/s320/0.jpg" width="320" /></a></div>
<br />
A lot of times development is not straightforward, you hit a corner and don't know what else to do to fix a problem. During those periods I've seen many developers do the following things:<br />
<ol>
<li>Start the debugger right away and go step by step into the problem</li>
<li>Sketch all possible scenarios that would lead to the problem, then println-debug each scenario</li>
<li>Take a walk for 10 mins to think about the problem</li>
</ol>
While all these approaches have worked for me, I tend to ignore the debugger use more and more over time. The reason for it can be summarized as:<br />
<br />
<i> "By using a debugger, I'm always avoiding to first understand the problem, but instead patching it with a single-scenario fix"</i><br />
<br />
In the past I've used debuggers a lot, starting it as soon as some problem arose. But then a pattern started to show up, fixes were coming back with other problems that the first fix didn't cover.<br />
<br />
It took a while to understand this and slowly move away from debuggers, it all started when some production applications started to fail, and we didn't have the chance to debug in such environment, we just had the logs.<br />
<br />
Reading the code, checking the possible inputs and flows, creating a test case (hopefully automated) and then attempting different fixes resulted in more consistent patches, fewer round-trips with the customers and higher efficiency in the team.<br />
<br />
So, whenever someone's starting to fix a bug, my first instinct is to try to create a test case that reproduces the problem before firing up the debugger gun.<br />
<ol>
</ol>
Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-5293249203674083262017-11-01T07:23:00.000-07:002017-11-01T07:23:24.496-07:00Review: Weekly Experiment: Standing deskAfter a week trying this new setup for working, here the results.<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.pei.com/wp-content/uploads/2017/02/Standing-Desks.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="400" data-original-width="800" height="318" src="https://www.pei.com/wp-content/uploads/2017/02/Standing-Desks.jpg" width="640" /></a></div>
<br />
<br />The rules:<br />
<ul>
<li>During mornings sitting will be the default</li>
<li>During afternoons standing will be the default</li>
<li>During lunch-time standing will be the default</li>
</ul>
<br />The control:<br />
<br />
<ul>
<li><b>Did it have any physical effect?</b> </li>
<ul>
<li>A big physical effect, the body feels better, although there were some small pains after the first days</li>
</ul>
<li><b>Did it have any food/drink related effect?</b></li>
<ul>
<li>Clearly, I consumed much less sugared drinks, not even coffee, and the body didn't ask for it.<b> </b></li>
</ul>
<li><b>Did it have any sleep-related effect?</b></li>
<ul>
<li>Not sure if related to this single event, but I've been sleeping better.<b> </b></li>
</ul>
<li><b>Did it affect in any way productivity and awareness?</b></li>
<ul>
<li>This was the biggest effect, procrastination decreased, interactions increased, awareness increase, hence productivity increased as well.</li>
</ul>
</ul>
Result: This is a must-do practice, I'm going to extend it to full work-days and not only in the afternoons, the effects have been so noticeable that I can't avoid feeling weird by sitting down.<br />
<br /><br />Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-18779981854769470132017-10-24T11:24:00.001-07:002017-10-24T11:24:22.096-07:00Weekly Experiment: Standing deskAfter listening to some interesting thoughts from <a href="http://www.se-radio.net/2015/09/se-radio-episode-238-linda-rising-on-the-agile-brain/">Linda Rising at Software Engineering Radio</a>, I've started a periodical experiment, time-boxed to a week in order to check results.<br />
<br />
So this weeks is related to standing desk, not really a standing desk, but a platform that allows me to work while standing up.<br />
<br />
The rules:<br />
<ul>
<li>During mornings sitting will be the default </li>
<li>During afternoons standing will be the default</li>
<li>During lunch-time standing will be the default </li>
</ul>
The control:<br />
<ul>
<li>Did it have any physical effect? </li>
<li>Did it have any food/drink related effect?</li>
<li>Did it have any sleep-related effect?</li>
<li>Did it affect in any way productivity and awareness?</li>
</ul>
<br />Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-1039324413768946542016-08-30T13:20:00.002-07:002016-08-30T13:20:27.559-07:00DCI: Data Context and Interaction Architecture playlistIt's been a while since I've heard about DCI, and still to this day I'm thrilled with the approach and the concept behind it.<br />
<br />
It still lacks lots for experimentation in my case, but I find the paradigm really but really interesting.<br />
So in that matter, here a list of resources that can introduce the paradigm in a better way:<br />
<br />
<h3>
Coplien: A good introduction</h3>
<br />
<iframe allowfullscreen="" frameborder="0" height="360" mozallowfullscreen="" src="https://player.vimeo.com/video/8235574" webkitallowfullscreen="" width="640"></iframe>
<a href="https://vimeo.com/8235574">James Coplien - The DCI Architecture: Supporting the Agile Agenda</a> from <a href="https://vimeo.com/user4280938">Øredev Conference</a> on <a href="https://vimeo.com/">Vimeo</a>.<br />
<br />
<h3>
Coplien: A good interview</h3>
- <a href="https://www.infoq.com/interviews/coplien-dci-architecture">https://www.infoq.com/interviews/coplien-dci-architecture</a><br />
<br />
<h3>
Coplien: Another great interview</h3>
- <a href="http://devnology.nl/podcasts/devnology-podcast-020-james-coplien-on-lean-architecture">http://devnology.nl/podcasts/devnology-podcast-020-james-coplien-on-lean-architecture</a><br />
<br />
<h3>
Reenskaug: A great overall view and history</h3>
<br />
<iframe allowfullscreen="" frameborder="0" height="360" mozallowfullscreen="" src="https://player.vimeo.com/video/43536416" webkitallowfullscreen="" width="640"></iframe>
<a href="https://vimeo.com/43536416">Trygve Reenskaug - Object Orientation Revisited. Simplicity and power with DCI.</a> from <a href="https://vimeo.com/ndcconferences">NDC Conferences</a> on <a href="https://vimeo.com/">Vimeo</a>.<br />
<br />
<br />
And finally a thick (in content) book, a great read in general.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://d188rgcu4zozwl.cloudfront.net/content/B004IK8PIW/images/cover.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://d188rgcu4zozwl.cloudfront.net/content/B004IK8PIW/images/cover.jpg" width="240" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://www.amazon.com/Lean-Architecture-Agile-Software-Development-ebook/dp/B004IK8PIW/ref=mt_kindle?_encoding=UTF8&me=#nav-subnav">Book on Amazon</a></div>
<br />Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-68682413565281991382016-08-13T20:23:00.003-07:002019-07-27T09:21:37.342-07:00An advice towards MercurialThis is not a rant, really, just a some few things I would like to write down.<br />
<br />
<h2>
History</h2>
When I started into development I've got the great suggestion to use revision control systems, the first one that I ever used was <a href="http://www.nongnu.org/cvs">CVS</a>, it really worked well for my own purposes, just had some issues with the sharing-between multiple machines.<br />
<br />
Then Subversion was the hot-thing and it was a bit better that <a href="https://subversion.apache.org/">Subversion</a>, but still had some of the things that I disliked from CVS.<br />
<br />
Then <a href="https://git-scm.com/">GIT</a> showed up, the projects I was working on required CVS, so I got an early non-official version of git-svn and started working with it, it was great, so many of my problems went away, but it was still under a SVN server.<br />
<br />
After that , Github, Bitbucket, Kiln, and the tipping point, everybody switched to the reasonable choice, distributed revision control systems, and I think the best summary for why this approach is better than others, is described by <a href="http://www.joelonsoftware.com/items/2010/03/17.html">Joel</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji5jLfVOE0odS9RtOFaULv5ZLPTyGLTGcnCu2xH50yTBzMS4Y9bbbxJPD3M4RjRJVkQ6Xr3xE8s0iKMbdNUF71IfGmxoZJBStVqt3gcxaR6lHKzu8xRKtDheMVj_mvZi7yy3Sn_VGU8GU/s1600/hg.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="499" data-original-width="384" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji5jLfVOE0odS9RtOFaULv5ZLPTyGLTGcnCu2xH50yTBzMS4Y9bbbxJPD3M4RjRJVkQ6Xr3xE8s0iKMbdNUF71IfGmxoZJBStVqt3gcxaR6lHKzu8xRKtDheMVj_mvZi7yy3Sn_VGU8GU/s320/hg.jpg" width="246" /></a></div>
<br />
<h2>
My point</h2>
<br />
My point is not to tell which tool is technically better, my point is more subjective, I think that Git is still technically the most advanced approach you can have for revision control systems, but it might not be the most simple one to use.<br />
<br />
I have used a lot of tools, and among all of them the one that still holds my thumbs up is <a href="https://www.mercurial-scm.org/">Mercurial</a>, here some few reasons:<br />
<ul>
<li>Simple and concise user interface (commands)</li>
<li>Better merging strategies</li>
<li>No automatic commits on merge</li>
<li>Good performance</li>
<li>Simple to explain</li>
<li>Gentle learning curve</li>
<li>Consistent tooling </li>
</ul>
Not too many reasons, rights? that's why I like it, because it just works, no porcelain/plumbing, just the tool. The other tool that goes beyond this is Fossil SCM, but it still needs adoption.<br />
<br />
So in the end, my suggestion, if you are using revision control systems and you are unhappy with Git, or you don't know any other tool, give Mercurial a try.Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-8872200005027437042016-07-27T06:20:00.002-07:002019-07-27T09:13:41.238-07:00Some interesting things...During the last seven years I've been working as a software developer, ocasional team leader, weird tester and lazy seller.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://farm9.staticflickr.com/8671/15646186494_5b99212368_o.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://farm9.staticflickr.com/8671/15646186494_5b99212368_o.jpg" width="320" /></a></div>
<br />
<br />
The world of software development is so wide and moving that you never get tired of it, I happen to dislike some technology approaches, some practices, and even some programming languages.<br />
<br />
But something I come to appreciate from the profession itself, is the self-pacing nature of it. It's possible to have great teams where things move really fast and well, and is also possible to get into a slow-as-a-snail situation in which you can't even see the final outcome.<br />
<br />
I've been in many kinds of teams, and I think I know how to create a working environment that helps to understand the problems, react to them and make things better, I have come to that state.<br />
<br />
I can't say that I'm the best developer, because I'm not, my role is closer to a problem-solver. That's why I've been investing some time looking for options in software development in which I can learn more, new problems, new challenges, and came across <a href="http://www.toptal.com/">TopTal</a>.<br />
<br />
Confession, I have heard of it while listening to <a href="https://changelog.com/">TheChangelog</a>, that ringed the bells for me, working from home is a nice incentive, now that I have a family, and the chance to work with people all over the world, is a hook for me. So, I'm looking forward to join it's <a href="https://www.toptal.com/software">development group</a>.<br />
<br />
I'm currently applying to see: how it is, how it works, what can I do in there, will it suit me?<br />
<br />
But only time and practice will say, let's see how it goes...<br />
<br />
Update: It didn't go that well :-), but it was a great opportunity to understand how little I know, and to try to learn new things Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-53459979008272413962016-07-18T10:11:00.000-07:002019-07-27T09:26:28.853-07:00Personal current trends on software development<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiofJ5kr1K6ahzIe8BzUMhQD2eugdUGUH8xVP-vtSk4eci8HFzsfxB4GE9846YKTj7d6urEkxyKo45pgUZWNnbvM6XfdTFoihu9inZAUy8NKiQcV5EEtv4tRsI3Z52hF5HRKkhvyyKH0E/s1600/tools.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="570" data-original-width="570" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiofJ5kr1K6ahzIe8BzUMhQD2eugdUGUH8xVP-vtSk4eci8HFzsfxB4GE9846YKTj7d6urEkxyKo45pgUZWNnbvM6XfdTFoihu9inZAUy8NKiQcV5EEtv4tRsI3Z52hF5HRKkhvyyKH0E/s320/tools.jpg" width="320" /></a></div>
<br />
<br />
Most productive development environment (server-side):<br />
<ul>
<li>Java 8 + <a href="https://projects.spring.io/spring-framework/">Spring Frameworks</a> + <a href="http://projects.spring.io/spring-boot">SpringBoot</a></li>
<li><a href="http://www.jooq.org/">jOOq</a> or <a href="http://hibernate.org/">Hibernate</a></li>
<li><a href="https://maven.apache.org/">Maven</a> as build tool </li>
<li><a href="https://eclipse.org/">Eclipse</a> or <a href="https://www.jetbrains.com/idea">IntelliJ</a> as IDE</li>
</ul>
Most productive web development environment (single-page applications):<br />
<ul>
<li><a href="https://facebook.github.io/react/">React.js</a> with <a href="https://webpack.github.io/">WebPack</a></li>
<li><a href="https://www.typescriptlang.org/">Typescript</a> </li>
<li><a href="https://atom.io/">Atom</a> or <a href="http://www.vim.org/">Vim</a> as editor</li>
<li><a href="https://www.npmjs.com/">NPM</a> as build tool</li>
</ul>
Most productive mobile development environment:<br />
<ul>
<li><a href="http://www.groovy-lang.org/">Groovy</a> as programming language</li>
<li><a href="https://gradle.org/">Gradle</a> build tool</li>
<li><a href="https://www.jetbrains.com/idea">IntelliJ</a> as IDE </li>
</ul>
Most interesting programming model:<br />
<ul>
<li><a href="https://clojure.org/">Clojure/Lisp</a></li>
<li><a href="http://elixir-lang.org/">Elixir/Erlang</a></li>
</ul>
Most useful getting-things-done tool:<br />
<ul>
<li><a href="https://golang.org/">Go</a> programming language</li>
<li><a href="https://www.docker.com/">Docker</a></li>
</ul>
Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-69814996117259136132016-03-11T05:55:00.003-08:002016-03-11T05:55:29.182-08:00A personal wikiA while ago I read in many places that you should write down what you learn, and that the best way to do it is by having a personal wiki.<br />
<br />
So I started doing that, but at the time the options I had were:<br />
<div>
<ul>
<li>Install a local server and then use MediaWiki or something similar</li>
<li>Install a standalone application that worked as a wiki</li>
<li>Use a public service to create a personal wiki</li>
</ul>
<div>
But no matter how hard I tried, I couldn't get use to it, I worked most of the time offline, and I didn't like to be doing configurations over and over (since I still use a variety of OSes).</div>
</div>
<br />
But during the last year I've been working on personal projects with <a href="http://fossil-scm.org/">Fossil SCM</a>, which is a great-scm created by the mind behind <a href="https://www.sqlite.org/">SQLite</a>, the great <a href="https://en.wikipedia.org/wiki/D._Richard_Hipp">Dr. Richard Hipp</a>, you should listen to his talks, he's quite something.<br />
<br />
And with this standalone SCM that comes with an embedded wiki, I started creating content, of everything I had in mind:<br />
<div>
<ul>
<li>Vim shortcuts</li>
<li>Daily logs</li>
<li>Small shell tweaks</li>
<li>Docker commands</li>
</ul>
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSsThQtyuBKI4zZLfNHuHE2xMnuhCdHp_PkrlbrvNIuH73bCbGEGwO8rE_-J2dFTAsE_qPzb2wF32QeZ5qNCeo75qp2-cBr9Sja0O-__o9EBxpOBOdgextn7Dtfc_zFWkNUwDWj5TYCzg/s1600/Screen+Shot+2016-03-11+at+9.54.06+AM.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="365" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSsThQtyuBKI4zZLfNHuHE2xMnuhCdHp_PkrlbrvNIuH73bCbGEGwO8rE_-J2dFTAsE_qPzb2wF32QeZ5qNCeo75qp2-cBr9Sja0O-__o9EBxpOBOdgextn7Dtfc_zFWkNUwDWj5TYCzg/s400/Screen+Shot+2016-03-11+at+9.54.06+AM.png" width="400" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">snapshot</td></tr>
</tbody></table>
<div>
<br /></div>
<div>
And I'm having fun, this is great, the full-scm is a single binary, I don't need an environment, and is all versioned. I can rewind some things I did and restore old things. It's immensely useful for writing, fun for reading, and really concise.</div>
</div>
<br />
If you are thinking on starting a personal wiki, I would strongly suggest you to consider <a href="http://fossil-scm.org/">Fossil-SCM</a>, you won't regret it.Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-19471726843401585032016-01-15T11:32:00.001-08:002016-01-15T11:32:21.135-08:00A new perspectiveFrom time to time you get used to the environment you work with, you feel confident about what you do and you think that your approaches are kind of safe an standard.<br />
<br />
That is something really naive for someone who is a developer, I have been/I am that person. During my first programming years I was exposed to Java and C++, these were the door-openers for my to the entire programming world.<br />
<br />
I have set my expectations around the way these environments, and for a long time I thought that I was right in investing time and effort into making myself an expert on them. But then after a while, after some rough corners and rusted code I have thought to myself 'there must be a different way'.<br />
<br />
And of course we have the Internet of things to ask for opinions, and that I did, and what a wonderful world I have found after that.<br />
<br />
In my point of view, programming is much more like carpentry, there are tools to do the work, there are different kinds of wood, there are different kinds of furniture, and you can do many things with a different combinations.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.history.org/Foundation/journal/Winter08/images/Pix04B_r1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://www.history.org/Foundation/journal/Winter08/images/Pix04B_r1.jpg" height="425" width="640" /></a></div>
<br />
<br />
As you might know carpenters have different styles and tools depending on how they learned to do their job, and I think of programming in a similar way, we do have really different ways to do things. And we should better know the most we can in order to make a decision.<br />
<br />
So, to make it short, here are some programming languages that I would suggest you to learn (but learn, not just try, learn to the core by doing something with them):<br />
<ul>
<li><a href="https://www.codecademy.com/learn/ruby"><b>Ruby</b></a>: You will get a whole new mindset about programming and problem solving, it combines metadata-based programming, imperative programming and functional programming.</li>
<li><a href="https://tour.golang.org/"><b>Go-lang</b></a>: This is more than a language, is a whole environment that provides a practical and really simple programming experience.</li>
<li><a href="http://www.braveclojure.com/"><b>Clojure</b></a>: Still learning this, but is so much different to what I normally use that I'm really having my brain twisted backwards.</li>
</ul>
Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-29975328354077236032016-01-06T04:38:00.000-08:002019-08-16T04:22:34.953-07:00A strange path in development<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
<br />
During the time I've being a software developer there are many things that I noticed in my personal growth as a programmer, I can quickly list the following phases/periods:<br />
<ul>
<li><b>Beginner</b>: You do have notions for programming, but write awful code.</li>
<li><b>User</b>: You start writting better code, you also see your previous mistakes.</li>
<li><b>Experienced</b>: You know the ground, and you are comfortable with it. </li>
</ul>
And the interesting thing about these phases is that are technology/language/paradigm based. What I mean with this is that you cycle through these phases every time you learn something new (at least in programming, in my personal case).<br />
<br />
First I learned structured programming, then object-oriented programming, then aspect-oriented programming, then functional-programming, then <a href="https://en.wikipedia.org/wiki/Data,_context_and_interaction">DCI</a>. All of them in a different set of technologies and tools that completely changed what I thought I knew about programming. This is a learning pattern of mine that I know it works, every time I try to learn something new I know that these phases are going to be in the way.<br />
<br />
I kind of know now how I learn, and I can do something about it. Now it's simpler to learn something new, and at the moment this new thing is <a href="https://en.wikipedia.org/wiki/Lisp_(programming_language)">LISP</a> via <a href="http://clojure.org/">Clojure</a>, not sure what is gonna happen, but I can tell you that my brain is breaking old rules every week.<br />
<br />
I think that's the message for this post, know how you learn, then kick the shit out of your brain.Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-9045128893311124262015-11-19T04:17:00.003-08:002015-11-19T04:17:51.487-08:00Going backHi there, for a while I've been out through several things that kept me busy enough,
now that things are slowly gaining a pace I'll start writing again, for me, and for her:
<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPTxfBvR-o9prl988neuOSfaEwLNgKUwVov8HEielplopm9QRVHkqgRJUHeN4wey5o9_kv6Uiu5ZR0V7xbI7i7a_rbjrQGxX_xAPbJbDCKOlYAnkQar1iTBJOPfx9nPMfQfOnZug-3LfI/s1600/smile.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjPTxfBvR-o9prl988neuOSfaEwLNgKUwVov8HEielplopm9QRVHkqgRJUHeN4wey5o9_kv6Uiu5ZR0V7xbI7i7a_rbjrQGxX_xAPbJbDCKOlYAnkQar1iTBJOPfx9nPMfQfOnZug-3LfI/s400/smile.jpg" width="240" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Emilia</td></tr>
</tbody></table>
<br />Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-31002326563380309422015-05-26T13:21:00.003-07:002015-05-26T13:25:59.864-07:00Switching to VIM as main editorDuring a normal day of work one gets into a lot of different tasks related to programming, documenting, writing, reading and so on.<br />
<br />
Multiple formats are handled by our fingers each day, and multiple things are done over and over and over. One of these things is editing, editing has been for a long time for me, essential.<br />
<br />
Editing text in different kind of files has had a lot of testing from my side, my requirements are quite simple:<br />
<br />
<ul>
<li>Multiple encoding support</li>
<li>dos-to-unix and viceversa editing </li>
<li>multi-window/panel split features</li>
<li>snippets</li>
<li>auto-completion</li>
<li>formatting</li>
<li>visualization</li>
<li>file-tree navigation</li>
</ul>
<div>
You might say, these things are simple and you can fill them up with TextMate, Notepad++ or an IDE, and perhaps you're right, but not in my context.</div>
<div>
<br /></div>
<div>
My context is development, of different kinds and different programming languages, so here you have some considerations/notes/remarks for the editors I've used:</div>
<div>
<ul>
<li><b>IDE</b>s: these are great, fully integrated, but I'm not always with the possibility to delegate 1GB of memory just to edit a simple YAML file.</li>
<li><b>High-end editors</b>: Such as TextMate, SublimeText and others. I have used them, and I have been pleased with their simplicity and user-interface. But sadly it doesn't satisfy my mental model since from time to time I have to work over an SSH connection with scripts.</li>
<li><b>Emacs and derivatives</b>: I love Emacs, and I love JED, but sadly such environments need (from my point of view) lots of effort to configure, setup, and even to keep it working for in a productive way for my needs. I use them from time to time, but they're not my first choice.</li>
</ul>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://raw.githubusercontent.com/chrishunt/dot-files/master/.screenshot.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="400" src="https://raw.githubusercontent.com/chrishunt/dot-files/master/.screenshot.jpg" width="640" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
So finally, I tried <a href="http://vim.org/">VIM</a>, it's a great tool, I cannot say if it's better than Emacs or others, but one thing I can say, it has a great community, the Ruby and Open Source communities in general have chosen <a href="http://vim.org/">VIM</a> and made a damn excellent environment out of it, this was not the case 5 years ago, things like:</div>
</div>
<div>
<ul>
<li><a href="https://github.com/carlhuda/janus">Janus distribution</a>: Great default-environment setup with lots of goodies.</li>
<li><a href="http://vimawesome.com/">Vim awesome</a>: The place to check plugins and extensions.</li>
<li><a href="http://vimcasts.org/">VimCasts</a>: Great learning resource.</li>
</ul>
<div>
And others make it my first choice right now, it's kind of confusing at time to get the edition modes, but once switching for some hours it gets natural, <a href="http://www.vim.org/">VIM</a> is not only an editor, is a powerful edition environment that works really well, and it's mainly because of the community behind it. </div>
</div>
<div>
<br /></div>
<div>
Got give it a try, or try Emacs, but as I was told by others, define your needs and pick the tool that applies to your context.</div>
Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-82318723438566446942015-04-25T17:28:00.002-07:002015-04-25T17:28:46.793-07:00UAGRM: Desarrollo de software Off-shore<iframe frameborder="0" height="500" marginheight="0" marginwidth="0" scrolling="no" src="https://www.slideshare.net/slideshow/embed_code/key/ujem1lgrNm7Zii" width="476"></iframe>Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-26292338069204342552014-12-11T13:55:00.001-08:002014-12-11T13:55:52.790-08:00On the sometimes painful email-delivery process<br />
<a href="http://www.emailisnotdead.com/">Email is not dead</a>, is not even a zombie. If something is well alive and working in all areas I can think of; given that, many of not all applications have to know how to (at least) send mails properly to all the different SMTP servers and providers there are.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://static.mailchimp.com/www/images/about/about-us/cards.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://static.mailchimp.com/www/images/about/about-us/cards.jpg" height="213" width="320" /></a></div>
<br />
<br />
Now in my current job we deal mainly with Java-based projects in which JavaMail is the major, sometimes we deal with legacy systems with old implementations, sometimes we deal with new projects that have to communicate to old SMTP servers.<br />
<br />
In either case, the problem is how to do it, how to ensure that a mail is sent once the application you are working on is ready and running.<br />
<br />
Among the many approaches we've tried there are mainly two issues than come from time to time:<br />
<br />
<ul>
<li>How do I communicate with this particular SMTP server?</li>
<li>What's the best way to implement this functionality in my application?</li>
</ul>
<div>
Both questions can be easily answered now with little effort, but in some cases we have to dig deeper. This is my approach to answer these questions:</div>
<div>
</div>
<br />
<ul>
<li>How do I communicate with this particular SMTP server?</li>
<ul>
<li>Use tools, check with <a href="http://exchange.mvps.org/smtp_frames.htm">telnet</a>, use a command-line application like <a href="https://bitbucket.org/timoteo_ponce/javamail-sender">mailsender</a> (I wrote it ;-)) to see which setup works with your SMTP server.</li>
<li>Use a local and simple SMTP server to test with, something like <a href="http://mailcatcher.me/">MailCatcher</a>.</li>
</ul>
<li>What's the best way to implement this functionality in my application?</li>
<ul>
<li>Take what is working, no matter how old it is, it's being tested and used in many environments and works as customers expect it.</li>
</ul>
</ul>
Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-43953725114206478602014-09-15T08:06:00.000-07:002019-07-27T09:12:03.244-07:00Top ten shell commands for daily useAs software writers, we spend much time reading code, writing code, browsing it, searching things on it, breaking it, fixing it, etc. All for the sake of a good behavior in a component/module we try to build.<br />
<br />
During this process there are several opportunities in which you need something, a tool, that helps you find and do things quickly, and perhaps an IDE is an overkill when you have several things opened. So there's the shell, and with it, a lot of applications.<br />
<br />
Normally these are the tools I most use during my daily work:<br />
<ul>
<li><a href="http://unixhelp.ed.ac.uk/CGI/man-cgi?find">find</a> - Whenever you wanna search files by name and many other options, it's mandatory.</li>
</ul>
$> # I'm trying to get all build reports from the projects<br />
$> find /opt/projects -iname *report.html<br />
<ul>
<li><a href="http://unixhelp.ed.ac.uk/CGI/man-cgi?grep">grep</a> - Excellent tool to search patterns and strings within files</li>
</ul>
$> # what if want to check for all logs containing the ERROR level?<br />
4> grep -nHr --include="*.log" "ERROR" /opt/servers/logs/<br />
<ul>
<li><a href="http://tmux.sourceforge.net/">tmux</a> - Multiple SSH connections are not a problem anymore, just install tmux and create sessions within a single SSH connection.</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfqCKskmVuKCJq0eZsgyZHl67J2BRpTuQOW8WQ-2D6QO_dnFyY3xpbgH4Re1mEOdIqdBw-ViugyO6lfSfq6IUtlqopzu-WIfiIvqRUyZV0a70sCyu_Qpu54yrugo1C1q5UwXvH7byehh4/s1600/tmux.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="834" data-original-width="814" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjfqCKskmVuKCJq0eZsgyZHl67J2BRpTuQOW8WQ-2D6QO_dnFyY3xpbgH4Re1mEOdIqdBw-ViugyO6lfSfq6IUtlqopzu-WIfiIvqRUyZV0a70sCyu_Qpu54yrugo1C1q5UwXvH7byehh4/s400/tmux.png" width="390" /></a></div>
<br />
<ul>
<li><a href="http://unixhelp.ed.ac.uk/CGI/man-cgi?tar">tar</a> - Mandatory tool for packaging and compressing data</li>
</ul>
$> tar cvfz db_dumps.tar.gz *.sql<br />
<ul>
<li><a href="http://unixhelp.ed.ac.uk/CGI/man-cgi?watch">watch</a> - Lets you execute a command or script within a defined interval, helpful for monitoring things</li>
</ul>
$> watch -n 10 "du -hs /opt/packages"<br />
<ul>
<li><a href="http://unixhelp.ed.ac.uk/CGI/man-cgi?xargs">xargs</a> - Pipelines!!, who doesn't use them!? with this utility you can easily pass output data to another application</li>
</ul>
$> # delete all my missing files from the repo<br />
$> hg missing | xargs hg rm<br />
<ul>
<li><a href="http://timoponce.blogspot.com/2014/06/simple-editing-with-jed.html">jed</a> - Must have a simple shell editor, I prefer jed over all of them.</li>
<li><a href="http://unixhelp.ed.ac.uk/CGI/man-cgi?ssh">ssh</a> - Server connections are a must have when deploying applications, learn how to use it.</li>
<li><a href="http://unixhelp.ed.ac.uk/CGI/man-cgi?scp">scp</a> - Copy files through an SSH connection without problems.</li>
<li><a href="http://unixhelp.ed.ac.uk/CGI/man-cgi?wget">wget</a> - Get those HTTP files easily, use wget.</li>
</ul>
Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-76616191742271687142014-09-10T16:48:00.000-07:002015-05-09T09:27:44.671-07:00This is where I workDisclaimer: Draft from a long time ago. <br />
<br />
Back in December of 2009 I was preparing my thesis work for my graduation, and somehow a very funny guy called me saying that we have talked a while ago about a job offer in a software development company.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://www.swissbytes.ch/sites/all/themes/aaika/images/fullsite-img14.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="http://www.swissbytes.ch/sites/all/themes/aaika/images/fullsite-img14.jpg" height="299" width="640" /></a></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
</div>
<br />
At the beginning I was thrilled, I hadn't worked in a professional way by that moment, I couldn't talk nor understand English properly and I was very insecure about my skills against the European standards.<br />
<br />
But then I found out something, these guys were really interested in personal values above all, they might need skillful people, but it wasn't (and I dare to say it still isn't) the most important thing.<br />
<br />
We were a very small group, now a little bit larger, doing things I found challenging. There are several goals I have set for me in this workplace, I like working there, I enjoy the work I'm doing and the people whom I working with.<br />
<br />
Perhaps you want to <a href="http://swissbytes.ch/index.php?option=com_content&view=article&id=46&Itemid=54">take a look at the website to know the company</a> a little bit ;-)Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-55988607877058107652014-06-21T10:24:00.002-07:002014-06-21T10:24:30.941-07:00Simple editing with JEDA while ago when I was giving Slackware Linux the first tries I came across this tiny, very functional and very powerful text editor, <a href="http://www.jedsoft.org/jed/">JED</a>.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGh78DhJzEOU8hq4vOcb26LLWbYm81IDmYBFHWHnK0N5LWIJP_04Njvw65f7lvgmfjNfM6t2-p7reGNEaLnbfYI-bXz7EFfTY3eSbll21ymy9WvQOPY44rQw_Uq4P4L2ZnQzrnupynX34/s1600/Screen+shot+2014-06-21+at+1.21.21+PM.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGh78DhJzEOU8hq4vOcb26LLWbYm81IDmYBFHWHnK0N5LWIJP_04Njvw65f7lvgmfjNfM6t2-p7reGNEaLnbfYI-bXz7EFfTY3eSbll21ymy9WvQOPY44rQw_Uq4P4L2ZnQzrnupynX34/s1600/Screen+shot+2014-06-21+at+1.21.21+PM.png" height="283" width="400" /></a></div>
<br />
<br />
JED is a minimalistic text editor for the shell that emulates Emacs in most of its useful functionality, is not as powerful as Emacs itself but it has just enough for me.<br />
<br />
<ul>
<li>Syntax highlighting </li>
<li>Key bindings</li>
<li>Buffers for edition</li>
<li>Contextual shell menus</li>
<li>Very lightweight </li>
<li>And some <a href="http://www.jedsoft.org/jed/features.html">other features</a></li>
</ul>
<div>
It might not be an IDE, but it's my favorite tool for editing text via SSH, or when I'm doing something small and I just want to do it as fast as I can. </div>
<div>
<br /></div>
<div>
Give it a try, hopefully you will find it useful.</div>
<div>
<br /></div>
<div>
References</div>
<div>
<ul>
<li>Home page <a href="http://www.jedsoft.org/jed/">http://www.jedsoft.org/jed/</a></li>
<li>Quick guide <a href="http://www.cs.cmu.edu/~jeliza/work/jed-intro.html">http://www.cs.cmu.edu/~jeliza/work/jed-intro.html</a></li>
<li>Reference guide <a href="http://espec.ppgia.pucpr.br/doc/editores/jed/quickref.html">http://espec.ppgia.pucpr.br/doc/editores/jed/quickref.html</a></li>
</ul>
</div>
Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-7319365512752066992014-06-21T10:14:00.000-07:002014-06-21T10:14:19.929-07:00On ConventionsA while ago I listened about <a href="http://twit.tv/show/floss-weekly/79">Ruby on Rails on a podcast (FLOSS Weekly-episode)</a>, in that conversation I heard many of the concepts that later on I would find in books, frameworks and projects.<br />
<br />
But among all design decisions mentioned there, <a href="http://en.wikipedia.org/wiki/Convention_over_configuration">Convention Over Configuration</a> was the one that triggered something in my head.<br />
<br />
In a short summary COC is a principle that describe a work approach in which most decisions in are defined by conventions and not by manual setups, such as URL-mapping in a web application, see <a href="http://guides.rubyonrails.org/routing.html">Rails RESTFul URLs</a>.<br />
<br />
Under my personal context (mainly Java and JVM-based development) over the years this trend has been used more and more, and I couldn't agree more. Frameworks are the main target for this, things like JEE-6/7, ORMs like Hibernate and Dependency Injection frameworks like Spring must define a 'default' way to work.<br />
<br />
Although it is really useful to have more than one alternative to do something, it becomes really hard to start with any of those frameworks. The greatest advantage (in my opinion) of some of the more trending frameworks like Rails or Django is the learning curve, very easy to learn, very easy to start, very easy to be productive.<br />
<br />
JEE in all its flavors and Hibernate are not the case for it (in my opinion), there is no standard nor default way of doing things. And because of that a big part of the development community has migrated to another option. It is very important for us as developers to be consistent, and the change has to start on the framework-makers, and JEE must be the starting point since there are so many applications based on it.<br />
<br />
So, how would JEE become a better alternative?:<br />
<ul>
<li>Define a default build tool and stick with it</li>
<li>Define proper libraries in the repositories, no more broken APIs</li>
<li>Create a non-extensive guide with the basics to do a web application</li>
<li>Define a default open source deployment server</li>
<li>Provide a default architecture such as MVC</li>
</ul>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx4z2BY9Rfbu4vfwk5fxZpKacgPBjZLSlUJjj1k1R0QhN3DwZ5KfU_jG5NZB32sbcmMS2ZG2tLhxyYp61h7mCzy2ksCHQw8cBXhaRV-RiHOn2Um7v9rSoQ1vY1VIWx6Jq96ZDkNA35zUg/s1600/design_arquetype_01.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx4z2BY9Rfbu4vfwk5fxZpKacgPBjZLSlUJjj1k1R0QhN3DwZ5KfU_jG5NZB32sbcmMS2ZG2tLhxyYp61h7mCzy2ksCHQw8cBXhaRV-RiHOn2Um7v9rSoQ1vY1VIWx6Jq96ZDkNA35zUg/s1600/design_arquetype_01.png" height="256" width="320" /></a></div>
<div>
<br /></div>
<div>
Some progress on it has been achieved with Maven archetypes and things like AppFuse, but I think we are still a little behind Rails in that matter, although, it's improving.</div>
Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-91983854140007280212014-03-12T14:36:00.001-07:002014-03-12T14:36:17.095-07:00Presentación: Desarrollo de Software, Lecciones Aprendidas<iframe src="https://docs.google.com/presentation/d/1YzVlbz4qsftHSxaScXu93uTcyROSHVpchWYD2UxPDP0/embed?start=false&loop=false&delayms=3000" frameborder="0" width="640" height="480" allowfullscreen="true" mozallowfullscreen="true" webkitallowfullscreen="true"></iframe>Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-33957980644366618692014-01-14T06:39:00.002-08:002014-01-14T06:39:53.516-08:00About the joy of reading, and getting olderDuring the last few years I've started reading many books in all areas I'm interested on. Not only technology related, but also drama, history, and even comics.<br />
<br />
Reading was not pleasant for me for a while. I tried and tried during my teenage to be interested in books, because my brothers were avid readers, but I couldn't. I couldn't share their taste or interest for books, not even the intensity they have for them.<br />
<br />
But after a while I began to try something different, reading at my own pace, try to not compete with them. This is not a race, it doesn't matter how many books you read and how fast you do it, reading is reading, the more value you get out of them the better for you it is.<br />
<br />
I don't appreciate people having a huge cabinet full of books in his main room, we know, you are a reader, don't be so arrogant. I believe that an author's goal is to be read and understood, many times the message will be misinterpreted and even changed, but that depends on the reader.<br />
<br />
Reading is now a pleasure for me, I read slowly, very slowly. Sometimes I had to go back and read again because of my messed up memory, but is worth it. The message gets stuck in my head forever, wrong or right, doesn't matter, the message is there, and because I took so much time to read it I do care about understanding what I read.<br />
<br />
Now that I aged a little bit, it's hard to know what to read, there are some many things, so many ideas and stories, so many, so little time. A stupid problem when living in a society that needs more work than ever, but a problem after all.<br />
<br />
I'm trying to read and read, to understand and do it with things that I think are interesting, not reading because a boss requires it, not reading because everybody's reading it. Read because you care about, if not, go watch a movie, there are multiple forms of storytelling right now, you don't have to be limited to a media. Go listen to some podcasts, watch some movies, listen to the radio, talk with people, listen to them, learn... that's the real joy :)Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-15617166237408632542013-10-31T08:59:00.001-07:002013-10-31T08:59:24.534-07:00The computer revolution hasn't happened yetI'm a huge fan of conferences, I like documentaries and any kind of media that teaches something. And as a software developer I must say that there are lots of good resources for us to learn, to keep updated in technologies, concepts and general practices.<br />
<br />
One of the best presentations I've seen so far is <a href="https://www.youtube.com/watch?v=oKg1hTOQXoY">Alan Kay's keynote at OOPSLA 97</a>, I don't know if there are any transcripts of it, but it is very valuable to listen what the man has to say, recommended.<br />
<br />
<center>
<iframe allowfullscreen="" frameborder="0" height="315" src="//www.youtube.com/embed/oKg1hTOQXoY" width="420"></iframe>
</center>
Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.comtag:blogger.com,1999:blog-5502681789285906166.post-13277657347678635322013-09-11T21:24:00.000-07:002013-09-11T21:24:01.254-07:00The mythical man month - the tar pit<h2>
Preface</h2>
<br />
It's been a while since I wrote something, work, university and life in general have kept me busy enough to forget that from time to time it is required for me to spare some words in any kind of medium. Just for the fun of doing it.<br />
<br />
Then I just started reading the book <a href="http://www.amazon.com/The-Mythical-Man-Month-Engineering-Anniversary/dp/0201835959">The Mythical Man Month</a> by <a href="http://www.amazon.com/s/ref=ntt_athr_dp_sr_1?_encoding=UTF8&field-author=Frederick%20P.%20Brooks%20Jr.&search-alias=books&sort=relevancerank">Frederick P. Brooks</a> because I found in many places that it is a mandatory reading for software development in general and I started reading it to find out what it has on it.<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="http://ecx.images-amazon.com/images/I/51WIpM70FEL.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="http://ecx.images-amazon.com/images/I/51WIpM70FEL.jpg" width="215" /></a></div>
<br />
<br />
Initially I was just a little bit skeptic about the fact that a book so old (in software-related terms) could have some content for me to be interested.<br />
<br />
But after finishing the first chapter I realized that this is not just only a very interesting book, but an invaluable source of data, techniques, practices and tales about how software engineering has been done in the words of the great <a href="http://www.amazon.com/s/ref=ntt_athr_dp_sr_1?_encoding=UTF8&field-author=Frederick%20P.%20Brooks%20Jr.&search-alias=books&sort=relevancerank">Frederick P. Brook</a>.<br />
<br />
So as I identify this book as something I want to remember, I'm going to write down my thoughts in a chapter-by-chapter basis, pointing the things I have experienced related to them.<br />
<br />
<h2>
The Tar Pit</h2>
<div>
In this chapter its author identifies that in many senses large systems development can be compared to a huge tar pit where incredibly strong creatures have found their death. </div>
<div>
<br /></div>
<div>
It defines in a very interesting way programming systems product as:</div>
<div>
<ul>
<li><b>A program</b>, a software product that can be developed by small teams, a simple application (i.e. <a href="http://www.ss64.com/bash/cat.html%E2%80%8E">cat</a>).</li>
<li><b>A programming product</b>, a software product that can be extended or used for the programming of other systems, a library component (i.e. <a href="http://www.sqlite.org/%E2%80%8E">SQLite</a>).</li>
<li><b>A programming system</b>, collection of interacting programming products, I identify it as a basic operating system (i.e. <a href="http://www.minix3.org/%E2%80%8E">Minix</a>).</li>
<li><b>A programming system product</b>, a collection of interacting programming products that could used and extended by anybody, I identify it as a complete operating system (i.e. <a href="http://www.linux.org/">Linux</a>)</li>
</ul>
<div>
Based on such classification it describes how systems programming is a craft that has joys and woes inherent of software development, that is impossible to develop something without having limited resources, budget, time and collaboration. But when ones get things done you can express with great honor that you survived the pit. </div>
</div>
Timoteo Poncehttp://www.blogger.com/profile/10438212775829198492noreply@blogger.com