<?xml version="1.0" encoding="utf-8"?><rss version="2.0"><channel><title>Software Blog</title><link>http://chuckcharbeneau.com:80/OnSoftware</link><description></description><item><title>AI and Automation</title><link>http://chuckcharbeneau.com:80/OnSoftware/ai-and-automation</link><description>&lt;p&gt;&lt;span style="white-space: pre-wrap;"&gt; I'm seeing a significant amount of conflation with these two things, and as someone who has made a career out of business process improvement through the implementation of software and automation, I can tell you that we've been doing automation (successfully) without AI for a very long time.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;Before writing a line of code, choosing an automation tool or (PLEASE DEAR GOD) asking an LLM to do your thinking for you, there is a way to look at business processes to identify what, if anything, needs intervention.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;When it comes to your business, there are three dials that you can turn to see improvement, and they are labeled:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;"People"&lt;/span&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;"Processes"&lt;/span&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;"Products"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;These three dials, if adjusted or changed without consideration, can turn simple business change into a three body problem faster than you can say "Henri Poincar&amp;eacute;."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;Here&amp;rsquo;s the simplest way I know to explain it: every business is a system, and every system has a limiting factor.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;That idea sits at the heart of something called the "Theory of Constraints", but you don&amp;rsquo;t need to know the theory to recognize it in practice. You&amp;rsquo;ve felt it any time you worked harder, moved faster, or bought better tools&amp;mdash;and nothing really improved. Work just piled up somewhere else.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;That&amp;rsquo;s because systems don&amp;rsquo;t get better when everything gets faster. They get better when the slowest, most fragile, or most confusing part gets attention. Speeding up everything except the bottleneck doesn&amp;rsquo;t fix the system. It just creates more pressure where things already struggle.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;This is where automation and AI so often go wrong. They&amp;rsquo;re applied broadly, enthusiastically, and early&amp;mdash;before anyone has paused to ask where work actually slows down, where decisions stall, or where humans are forced to compensate for unclear processes.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;You can see this clearly in real estate.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;From the outside, it&amp;rsquo;s tempting to think the problem is follow-up. So people reach for tools that automate emails, texts, and reminders. But if you zoom out and trace the actual flow of work&amp;mdash;lead comes in, conversation happens, paperwork starts, timelines emerge, inspections happen, documents move, decisions get made&amp;mdash;the friction usually isn&amp;rsquo;t writing the next message. It&amp;rsquo;s visibility. It&amp;rsquo;s not knowing, at a glance, where a deal actually stands or what the next real constraint is.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;Adding smarter messaging doesn&amp;rsquo;t fix a broken hand-off between stages. Automating lead capture doesn&amp;rsquo;t help if nothing connects cleanly to transaction management. The system doesn&amp;rsquo;t need to be louder or faster&amp;mdash;it needs to be clearer.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;The same pattern shows up in small consulting businesses.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;These are often smart, capable people who are constantly busy. Work arrives through email, LinkedIn, referrals, DMs. Project details live in proposals, shared docs, Slack threads, and someone&amp;rsquo;s head. When a client asks for an update, the consultant has to stop, search, reconstruct context, and reorient themselves.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;The issue isn&amp;rsquo;t effort or expertise. It&amp;rsquo;s not even scale. It&amp;rsquo;s that the system requires constant thinking just to know what&amp;rsquo;s going on. That&amp;rsquo;s the constraint. Until that&amp;rsquo;s addressed, adding automation&amp;mdash;or AI&amp;mdash;just accelerates confusion.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;This is why I think about business improvement as three dials: people, processes, and products.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;You can turn any one of them. Hire more people. Change how work flows. Buy new tools. But if you turn the wrong dial first, or turn one without considering the others, you can make a simple change feel like chaos almost instantly.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;Well-designed automation tends to feel boring. Calming. Quietly helpful.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;Poorly designed automation feels like speed without control.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;AI is powerful. Automation is powerful. But neither replaces the human effort of understanding how work actually moves through a system, where it slows down, and why.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="white-space: pre-wrap;"&gt;That part still requires thinking.&lt;/span&gt;&lt;/p&gt;</description><pubDate>Wed, 31 Dec 2025 15:07:18 GMT</pubDate><guid isPermaLink="true">http://chuckcharbeneau.com:80/OnSoftware/ai-and-automation</guid></item><item><title>Agile Isn't Just Something the Developers Do</title><link>http://chuckcharbeneau.com:80/OnSoftware/agile-isn-t-just-something-the-developers-do</link><description>&lt;p&gt;&lt;img alt="" src="/Media/Default/BlogImages/Software/AgileManifesto.png" width="1101" height="630" /&gt;&lt;/p&gt;
&lt;p&gt;If your business is asking the IT groups to "be agile" but are not, themselves, living by the Agile Values as laid out in the &lt;a href="http://agilemanifesto.org/" rel="noopener nofollow" target="_blank"&gt;Agile Manifesto&lt;/a&gt;, the impedance mismatch between Business and IT will fast become untenable.&lt;/p&gt;
&lt;p&gt;If the development team &lt;strong&gt;values Individuals&lt;/strong&gt; and interactions over processes and tools, but the business mandates the use of multiple systems for time reporting, the creation of complete, pre-project, exact time and cost estimates and gant chart project plans, and monolithic, unautomated change control processes, then the team will be unable to work with Agility.&lt;/p&gt;
&lt;p&gt;If the development team &lt;strong&gt;values Working software&lt;/strong&gt; over comprehensive documentation, but the business mandates full, upfront design documentation creation and constant written status reporting, the team will be unable to work with Agility.&lt;/p&gt;
&lt;p&gt;If the development team&lt;strong&gt; values Customer collaboration&lt;/strong&gt; over contract negotiation, but the business requires Fixed Bid, Complete Scope, Fixed Time contracting, the team will be unable to work with Agility with their partners.&lt;/p&gt;
&lt;p&gt;If the development team &lt;strong&gt;values Responding to change&lt;/strong&gt; over following a plan, but the business penalizes teams for not exactly following an original project plan, or is unable or unwilling to adapt goals and work to the current business or technical environment, the team will be unable to work with Agility.&lt;/p&gt;
&lt;p&gt;Are you asking your organization to be Agile, or is it just something you think the developers do?&lt;/p&gt;</description><pubDate>Mon, 08 Apr 2019 20:20:00 GMT</pubDate><guid isPermaLink="true">http://chuckcharbeneau.com:80/OnSoftware/agile-isn-t-just-something-the-developers-do</guid></item><item><title>Take This: It's Dangerous to Go Alone - Craftsmanship and Agile Software Development</title><link>http://chuckcharbeneau.com:80/OnCraftsmanshipTakeThis</link><description>&lt;p&gt;In the early days of &lt;strong&gt;&lt;em&gt;Agile&lt;/em&gt;&lt;/strong&gt;&lt;em&gt; Software Development&lt;/em&gt;, agile was actually an adjective. Agile Software Development was a complete thought and process, and it focused on the process by which software was created by dedicated software developers. &lt;a href="http://www.extremeprogramming.org/"&gt;Extreme Programming&lt;/a&gt; (XP) was the norm and it was understood that good development practices created quality software. Unfortunately, although many XP practices can be found in scrum, not since the heyday of XP have they been a focus.&lt;/p&gt;
&lt;p&gt;Over the years, as scrum has evolved, the term 'Agile' has evolved as well, transforming from an adjective that described the noun 'software development', to becoming a noun on its own; a thing that, itself, is being implemented. By losing the 'software development' from the end of the phrase, many in the software industry feel that a key focus has been lost with regards to our craft, and that there is danger in pursuing the agile process around software development without a focus on the aspects of &lt;strong&gt;&lt;em&gt;agile&lt;/em&gt;&lt;/strong&gt; software development that codify good development practice.&lt;/p&gt;
&lt;p&gt;As someone who considers himself a Craftsman, who acts as a scrum coach to several teams and tries to embody the practice of scrum, I believe that the Agile Manifesto [http://www.agilemanifesto.org/] is an important first step to the creation of self-organizing, delivery focused teams. I also believe that it is specifically lacking in discussion that focuses on the behavior of the developers, the quality of the software they produce, or the goals of the team in how they respond to change.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://manifesto.softwarecraftsmanship.org"&gt;The Manifesto for Software Craftsmanship&lt;/a&gt; addresses these concerns specifically, complimenting and extending (without changing - in good SOLID practice) the Agile Manifesto with words specifically focused on the developer.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;As aspiring Software Craftsmen we are raising the bar of professional software development by practicing it and helping others learn the craft. Through this work we have come to value:&lt;/em&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;em&gt;Not only individuals and interactions, &lt;/em&gt; &lt;strong&gt;but also a Community of Professionals &lt;/strong&gt; &lt;em&gt;Not only working software&lt;/em&gt;, &lt;strong&gt;but also Well-Crafted Software &lt;/strong&gt; &lt;em&gt;Not only customer collaboration&lt;/em&gt;, &lt;strong&gt;but also Productive Partnerships&lt;/strong&gt; &lt;em&gt;Not only responding to change&lt;/em&gt;, &lt;strong&gt;but also Steadily Adding Value&lt;/strong&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;em&gt;That is, in pursuit of the items on the left we have found the items on the right to be indispensable. &lt;/em&gt;&lt;/p&gt;
&lt;h1&gt;We are tired of writing crap&lt;/h1&gt;
&lt;blockquote&gt;&amp;ldquo;We need to act like other craftsmen and start "signing our work&amp;rdquo;. - Andrew Hunt and David Thomas, &lt;strong&gt;The Pragmatic Programmer (1999)&lt;/strong&gt;&lt;/blockquote&gt;
&lt;p&gt;The Craftsmanship movement is an approach to software development that emphasizes the coding skills of the software developers as a primary tool in the success of the team. It is a direct response by many software developers to the perceived ills of the mainstream software industry, including the prioritization of financial concerns over developer accountability, time to market over code quality, and the sacrifice of developer continuous improvement as wasted time and unproductive. How many times have you been asked to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;sacrifice training time&lt;/li&gt;
&lt;li&gt;cut corners&lt;/li&gt;
&lt;li&gt;not do unit testing&lt;/li&gt;
&lt;li&gt;just get this one fix, feature or little thing in without following good practices&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each one of these scenarios is asking you to compromise your professionalism and ethics with regards to your craft for the sake of speed or cost. It is my position that this is dishonest to you, the developer, to the rest of our team who rely on our continued quality to be successful and to the customer, who has a reasonable expectation of quality, performance and attention to detail.&lt;/p&gt;
&lt;h1&gt;The Builder and the Software Craftsman&lt;/h1&gt;
&lt;blockquote&gt;"If you were hiring a builder to build an addition to your house, you wouldn't hire one who didn&amp;rsquo;t use a Measure, Level and Square. &lt;strong&gt; Why would you do it with the backbone of your business?&lt;/strong&gt; Automated Testing, Code Metrics, Code Style Analysis and Static Code Analysis are a .NET developers Measure, Level and Square and allow him to know the impacts of his change and prove the quality of his code." - &lt;strong&gt;&lt;em&gt;Chuck Charbeneau&lt;/em&gt;&lt;/strong&gt;&lt;/blockquote&gt;
&lt;p&gt;In all other fields we expect craftsmen to use the tools and processes of their trades to deliver the highest possible quality in the time available, and yet every day software developers are being asked to cut corners and sacrifice quality and craftsmanship on the products on which most of our society runs.&lt;/p&gt;
&lt;h1&gt;The Shield of No Compromise&lt;/h1&gt;
&lt;p&gt;As signatories of the Craftsmanship Manifesto, we agree that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We will not make messes in order to meet a schedule.&lt;/li&gt;
&lt;li&gt;We will not accept the eternal lie that we will &amp;ldquo;Clean things up later&amp;rdquo;.&lt;/li&gt;
&lt;li&gt;We will not believe the claim that quick means dirty.&lt;/li&gt;
&lt;li&gt;We will not accept the option to do it wrong.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We will not allow anyone to force us to behave unprofessionally. We agree to these axioms because they protect us from contributing to the degradation of the quality our product, from slowly building the barrier to success that is comprised of unnecessary technical debt; it shields us from contributing to, Robert C. Martin calls it, &lt;em&gt;The Giant Mess&lt;/em&gt; We also agree to face the Mess and Fix it, bit by bit, day-by-day. We agree to apply the Boy Scout Camping Rule to our products by submitting better code than the code you found when you started. We agree to strive to be proud of every line of code we write; to be willing to sign our name to each one. We agree to "do it right" even under pressure and to take responsibility to what we committed to. We take pride not only in our end product but also on the process we use to achieve it.&lt;/p&gt;
&lt;h1&gt;Sharpening the Blade of Our Craft&lt;/h1&gt;
&lt;p&gt;The software craftsman is a continuous learner. When she doesn't work, she spends her time studying, finding new methods and tools to improve her work. She writes code. She practices deliberately and understands the difference between practice and work. She practices in order to be prepared for work. She also contributes to the community. We are programmers. We need to talk about programming from time to time. We need time and space to focus on our primary discipline: the craft of programming. We should be continuously practicing and seeking out new methods of training and practice, including:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Kata_%28programming%29"&gt;Code katas&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://codekata.com/"&gt;http://codekata.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.codekatas.org/"&gt;http://www.codekatas.org/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://coderetreat.org/"&gt;Code retreats&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://codingdojo.org/"&gt;Coding dojo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://amzn.to/1ruqrjJ"&gt;Clean Code&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Test First&lt;/p&gt;
&lt;p&gt;Test Driven&lt;/p&gt;
&lt;p&gt;Test Obsessed&lt;/p&gt;
&lt;p&gt;&lt;a href="http://thecodelesscode.com/contents"&gt;Code koans&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;Master and Apprentice&lt;/h1&gt;
&lt;h2&gt;Find a Master&lt;/h2&gt;
&lt;p&gt;As Craftsmen, we recognize that there are other craftsmen in our midst and we seek them out to learn from their technique, analyze their craft and hold our work against theirs for the betterment of the craft.&lt;/p&gt;
&lt;h2&gt;Find an Apprentice&lt;/h2&gt;
&lt;p&gt;As craftsmen we realize that to teach a thing is to know a thing. We recognize that there is no better way to learn a craft than to teach it. Even if you are a beginner, there is always someone who is more of a beginner than you. Be it in the work place, a User Group or an online community, be a helpful, educating and guiding mind in the craftsman community.&lt;/p&gt;
&lt;h1&gt;Twelve Principles of Agile Software Development&lt;/h1&gt;
&lt;p&gt;Remember that this movement is not at odds with Agile Software Development; it is in service of agility that we seek to better our craft.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.&lt;/li&gt;
&lt;li&gt;Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.&lt;/li&gt;
&lt;li&gt;Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.&lt;/li&gt;
&lt;li&gt;Business people and developers must work together daily throughout the project.&lt;/li&gt;
&lt;li&gt;Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.&lt;/li&gt;
&lt;li&gt;The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.&lt;/li&gt;
&lt;li&gt;Working software is the primary measure of progress.&lt;/li&gt;
&lt;li&gt;Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.&lt;/li&gt;
&lt;li&gt;Continuous attention to technical excellence and good design enhances agility.&lt;/li&gt;
&lt;li&gt;Simplicity &amp;mdash; the art of maximizing the amount of work not done &amp;mdash; is essential.&lt;/li&gt;
&lt;li&gt;The best architectures, requirements, and designs emerge from self-organizing teams.&lt;/li&gt;
&lt;li&gt;At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;What's Next?&lt;/h1&gt;
&lt;p&gt;&lt;a href="http://manifesto.softwarecraftsmanship.org/"&gt;Sign the Manifesto&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Read and Educate yourself&lt;/p&gt;
&lt;ul&gt;Books:
&lt;li&gt;&lt;a href="http://amzn.to/230YwTZ"&gt;The Pragmatic Programmer&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://amzn.to/1SnofV0"&gt;Software Craftsmanship &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://amzn.to/1ruqrjJ"&gt;Clean Code&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://amzn.to/1SZRI3j"&gt;Clean Coder&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://amzn.to/1rEY6qC"&gt;The Software Craftsman: Professionalism, Pragmatism, Pride&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://amzn.to/1rV9rTv"&gt;Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description><pubDate>Wed, 11 May 2016 14:15:00 GMT</pubDate><guid isPermaLink="true">http://chuckcharbeneau.com:80/OnCraftsmanshipTakeThis</guid></item><item><title>What does it take to be a good Developer?</title><link>http://chuckcharbeneau.com:80/OnSoftware/what-does-it-take-to-be-a-good-developer</link><description>&lt;p&gt;The folks at lifehacker asked a simple question on their site the other day "&lt;a href="http://lifehacker.com/programmers-what-does-it-take-to-be-a-developer-other-1671165183"&gt;Programmers: What Does It Take to Be a Developer (Other than Coding)?&lt;/a&gt;". I love questions like this as it takes the conversation away from the religious wars of language syntax and looks at the other, important facets that make a good developer. My focus on teaching and improving ALM and Agile methodologies on dev teams has me asking this question quite often. To find the answers for a specific team, I tend to break down almost all Software Development dysfunctions into three main areas:&lt;/p&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;People&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Processes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Products.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;I have found that these three areas are the best filters to use to start to decompose developer and team issues to find the immediate, short and long term goals for continuous improvement.&lt;/p&gt;
&lt;h4&gt;People (Interpersonal Skills)&lt;/h4&gt;
&lt;h5&gt;How to Listen to Business Context&lt;/h5&gt;
&lt;p&gt;Most of what I do as a consultant is listening. I'm IT Therapy. I help the client talk through their problems and find a solution that fits their current (or desired) situation with an eye toward continuous improvement. Not every developer is going to be a consultant, however we should all learn to listen to our customer (no matter who they are) and try to lay out their problem in the context of their business &lt;em&gt;before&lt;/em&gt; we map the problem to a technical solution.&lt;/p&gt;
&lt;h5&gt;How To Listen to the Problem WITHOUT jumping to a Solution&lt;/h5&gt;
&lt;p&gt;Resist the urge to go straight to the hammer, even if the problem is a nail. Ask questions, offer functional solutions without talking about technology at all and help the client to feel that they are a part of the solution.&lt;/p&gt;
&lt;h5&gt;How to handle the Rejection of an Idea without taking it Personally&lt;/h5&gt;
&lt;p&gt;Sometimes in our industry even the best ideas have to take a back seat to other pressures. We can't use the best technology solution, we can't work in a desired timeline, we are hardpressed to use specific workflows or User Interface choices. No matter the compromise, no matter the rejection, we are there to serve the solution, and as a team we work to find the best overall solution given the time, team and technologies we have at the moment.&lt;/p&gt;
&lt;h5&gt;How to Say "I don't Know"&lt;/h5&gt;
&lt;p&gt;As a technologist you must check your ego at the door every morning. You will learn more through humility and honesty than you will by thinking that you have all the answers. Learn to admit when you don't know and make sure that you never have to repeat yourself on the same topic twice.&lt;/p&gt;
&lt;p&gt;I've written about the power of &lt;a href="Http://chuckcharbeneau.com/OnImprov/the-power-of-yes-and"&gt;Yes, AND!&lt;/a&gt; to development and creativity, and I will reiterate here that the ability to listen, agree and create as a team will give you and your team an edge that is hard to overcome.&lt;/p&gt;
&lt;h4&gt;Process (Patterns and Practices)&lt;/h4&gt;
&lt;p&gt;Sometimes, though, it IS about your knowledge and practice. I like the idea of &lt;a href="http://codekata.com/"&gt;Code Kata&lt;/a&gt;; small exercises that you repeat using different techniques and patterns to get the patterns and practices in grained in your head.&lt;/p&gt;
&lt;h5&gt;Gang of Four Design Patterns&lt;/h5&gt;
&lt;p&gt;These patterns are the basis for just about all enterprise level software development and have been implemented and discussed in just about every language applicable to their implementation.&lt;/p&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.amazon.com/Design-Patterns-Elements-Reusable-Object-Oriented/dp/0201633612/"&gt;Design Patterns: Elements of Reusable Object-Oriented Software&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.mobilefish.com/tutorials/design_patterns/design_patterns.html"&gt;Design Patterns Tutorial&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5&gt;Common Patterns of today's App Dev&lt;/h5&gt;
&lt;p&gt;No discussion about modern design patterns would be complete without at least referencing Uncle Bob's SOLID design principles.&lt;/p&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href=" http://butunclebob.com/"&gt;SOLID - The Principles of OOD&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/J6gsdw"&gt;Clean Code&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/18CWaSC"&gt;Clean Coder&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5&gt;How to Estimate their own capacity on a given task OR how to check one's ego at the development door&lt;/h5&gt;
&lt;p&gt;Along with being able to say "I don't know", be comfortable giving an honest assessment of your ability against a specific task. If you don't know anything about a specific technology, be honest with yourself and your client. They will thank you and learn to trust your ability to estimate as long as you maintain honesty and transparency throughout your process.&lt;/p&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/ref=sr_1_1?ie=UTF8&amp;amp;qid=1419178153&amp;amp;sr=8-1&amp;amp;keywords=Mythical+Man+Month"&gt;The Mythical Man Month&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.amazon.com/Agile-Estimating-Planning-Mike-Cohn/dp/0131479415/ref=sr_1_1?ie=UTF8&amp;amp;qid=1419177554&amp;amp;sr=8-1&amp;amp;keywords=Agile+software+planning"&gt;Agile Estimating and Planning&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h5&gt;Time Management&lt;/h5&gt;
&lt;p&gt;It would be nice if we could work on only the tasks that most interested us or that were the most exciting in our jobs. Unfortunately, in our business, there is a lot to do along with code, and the ability to manage your time across multiple tasks and plan your activity wisely is key to your continued success. From TPS reports, to design and business meetings; being able to plan your day and activities will make your life easier in so many ways.&lt;/p&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.amazon.com/Pomodoro-Technique-Illustrated-Pragmatic-Life-ebook/dp/B00A376NI8"&gt;The Pomodoro Technique&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.amazon.com/Getting-Results-Agile-Way-Personal-ebook/dp/B005X0MFD2"&gt;Getting Results the Agile Way: A Personal Results System for Work and Life&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.amazon.com/Personal-Kanban-Mapping-Work-Navigating-ebook/dp/B004R1Q642"&gt;Personal Kanban: Mapping Work | Navigating Life&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Finally, know when to walk away from a problem. Know when to get up, walk over, and talk a problem or idea through with a colleague or random hallway dweller. Sometimes just talking out loud about a technical problem will reveal the solution.&lt;/p&gt;
&lt;h5&gt;NO QA SURPRISES!!!&lt;/h5&gt;
&lt;p&gt;A Developer is responsible for his code, and should be the first person to test it; this includes, but is not limited to, unit testing. Unit and Integration tests are the first line of quantifying the correctness of our code, and therefore are the responsibility of the developer as a part of the deliverables to any QA process or team to prove or disprove the correctness of the delivered code. A Developer should never be surprised by bugs or errors found in their code, should have a clear understanding of the weak areas of his code and have tests that prove their understanding. A builder uses a Measure, Square and Level to prove correctness, and a developer uses Unit and Integration Tests.&lt;/p&gt;
&lt;h5&gt;Unit Testing&lt;/h5&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.amazon.com/Art-Unit-Testing-examples/dp/1617290890"&gt;The Art of Unit Testing: with examples in C# &lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.amazon.com/gp/product/0321146530/ref=as_li_ss_tl?ie=UTF8&amp;amp;camp=1789&amp;amp;creative=390957&amp;amp;creativeASIN=0321146530&amp;amp;linkCode=as2&amp;amp;tag=saraandchuck-20"&gt;Test Driven Development: By Example &lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;Products (Technology)&lt;/h4&gt;
&lt;h5&gt;How to use Source Control&lt;/h5&gt;
&lt;p&gt;I don't really care which is your favorite or which you pursue, but you need to understand how to work in a source control environment, what it means to have a branching strategy and how to work and play well with others in this environment. A clear understanding of Continuous Integration and even continuous delivery would be helpful, but Enterprise developers should always begin in source control.&lt;/p&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.visualstudio.com/en-us/explore/app-lifecycle-management-vs"&gt;TFS&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://git-scm.com/"&gt;GIT&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://subversion.apache.org/"&gt;Subversion&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description><pubDate>Sun, 21 Dec 2014 18:51:00 GMT</pubDate><guid isPermaLink="true">http://chuckcharbeneau.com:80/OnSoftware/what-does-it-take-to-be-a-good-developer</guid></item><item><title>On Becoming an Enterprise .NET Web Developer using PluralSight</title><link>http://chuckcharbeneau.com:80/OnSoftware/on-becoming-a-net-enterprise-developer-using-pluralsight</link><description>&lt;p&gt;About a year ago I started a series of posts on becoming a software developer to coincide with the &lt;a href="http://code.org"&gt;Code.Org&lt;/a&gt; "&lt;a href="http://code.org/learn"&gt;Hour of Code&lt;/a&gt;". This post is the fifth post in the series focusing on the skills, patterns and practices involved in being a developer. If you haven't yet, please go back and read through the preceding posts for better understanding of where this post is coming from.&lt;/p&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 1&lt;/strong&gt; - &lt;a href="./on-software-getting-started-and-staying-relevant"&gt;On Software, Getting Started and Staying Relevant&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 2&lt;/strong&gt; - &lt;a href="./on-software-stacks-and-technologies"&gt;On Software, Stacks and Technologies&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 3&lt;/strong&gt; - &lt;a href="./on-software-net"&gt;On Software, .NET&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 4&lt;/strong&gt; - &lt;a href="./on-software-owning-your-brand"&gt;On Software - Owning your brand&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;I'm going to use this post to build on the third entry, focusing specifically on using the PluralSight training site to learn and improve your .NET Skills. Whether you are trying to up your game as a developer or break into writing software in the enterprise, if you HAVEN'T signed up for a PluralSight membership, you need to go and do that right now. Seriously. Take a couple of hours a week and improve your current skills or learn something new.&lt;/p&gt;
&lt;p&gt;With your new membership, I'm going to lay out a suggested path for becoming an enterprise developer that I might be willing to hire.&lt;/p&gt;
&lt;h3&gt;Craftsmanship&lt;/h3&gt;
&lt;p&gt;First, you need to have instilled in you the proper methods for writing testable and maintainable code. The average enterprise application has a 7-10 year life span and while anyone can sling bits, only those that develop the skills to produce resilient, testable and maintainable software have a hope of longevity in the Enterprise and Consulting work force. I'm a firm believer in Robert C. Martin's SOLLID methodology as a starting point followed by a serious consideration of the accepted patterns and practices for enterprise development before charging off to chart new territory with any given application.&lt;/p&gt;
&lt;h4&gt;SOLID&lt;/h4&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/principles-oo-design"&gt;SOLID Principles of Object Oriented Design&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;Test Driven Design&lt;/h4&gt;
&lt;p&gt;I'm a solid believer in Test First Design and Development, but I don't believe that it's for everyone. That being said, even if you don't write your tests first, you still MUST WRITE TESTS. On my team, your code is not finished and ready for delivery unless it is accompanied by both unit tests as well as a test plan, both of at least a rudimentary level (not all code is unit tested, not all code is relevant to a test plan). I strongly believe that if you take the time to learn TDD it will force you to think about testability, and through that process, you will become a better programmer who produces more maintainable code. Even if you stop using TDD, your development and coding behaviors will be changed for the better for the exercise.&lt;/p&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/test-first-development-1"&gt;Test First Development - Part 1&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/test-first-development-2"&gt;Test First Development - Part 2&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/the-coding-dojo"&gt;Coding Dojo: Test Driven Development&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/tdd-as-design-tool"&gt;TDD as a Design Tool&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;Web Basics&lt;/h4&gt;
&lt;p&gt;Before getting into the back end .NET server languages that drive the enterprise web, it's important to have a handle on how to develop in and understand the technologies that all of the web is built on. Even though the Microsoft Enterprise runs on .NET, it is served up using HTML, CSS and JavaScript. These technologies can get you pretty far these days without ever having to write a line of back-end code.&lt;/p&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/html5-from-scratch"&gt;HTML5 From Scratch&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/html5-fundamentals-2e"&gt;HTML5 Fundamentals&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/front-end-web-app-html5-javascript-css"&gt;JavaScript&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/front-end-web-app-html5-javascript-css"&gt;Front-End Web Development Quick Start With HTML5, CSS, and JavaScript&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/angularjs-get-started"&gt;AngularJS: Get Started&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/angularjs-fundamentals"&gt;AngularJS Fundamentals&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/angularjs-patterns-clean-code"&gt;AngularJS Patterns: Clean Code&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;C#&lt;/h4&gt;
&lt;p&gt;By now you are a couple of days into your journey and you are wondering if there is actually any .NET content in this post, and I understand. I've attempted to lay out this discussion in a progressive manner, with incremental steps that build on each other. With that in mind, we will now step away from the web centric discussion to look at C# as a language&lt;/p&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/csharp-from-scratch"&gt;C# From Scratch&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/csharp-fundamentals-csharp5"&gt;C# Fundamentals with C# 5.0&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/skeet-csharp4"&gt;Master C# 4.0&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;MVC 5&lt;/h4&gt;
&lt;p&gt;And now, back to the web. Everything you've learned so far has brought you to this point; the point of developing code driven, enterprise ready web based applications that are dynamic, well tested and built on the accepted patterns and practices that customers, clients and employers have come to expect.&lt;/p&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/aspdotnet-mvc5-fundamentals"&gt;ASP.NET MVC 5 Fundamentals&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/angularjs-forms-bootstrap-mvc5"&gt;AngularJS Forms Using Bootstrap and MVC 5&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/build-apps-angular-breeze"&gt;Building Apps with Angular and Breeze - Part 1&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/build-apps-angular-breeze-part2"&gt;Building Apps with Angular and Breeze - Part 2&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;TDD - MVC&lt;/h4&gt;
&lt;p&gt;As I mentioned, I would be remiss if I didn't show you how to test your MVC code.&lt;/p&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/aspdotnet-mvc-testing-from-scratch"&gt;ASP.NET MVC Testing From Scratch&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/automated-aspdotnet-mvc"&gt;Automated ASP.NET MVC Testing: End to End&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;Web Services&lt;/h4&gt;
&lt;p&gt;The web isn't just about HTML. Most enterprises also run on a heterogeneous environment of web-facing services that allow systems to reveal data to their users as well as other systems both internally and externally for raw consumption. These data-centric endpoints leave the UI behind and follow industry standard protocols for the publication and consumption of data.&lt;/p&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/building-dotnet-web-services-10ways"&gt;10 Ways to Build Web Services in .NET&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/wcf-jumpstart"&gt;WCF Jumpstart&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/aspdotnet-web-services-introduction"&gt;Introduction to ASP.NET Web Services&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/web-api-design"&gt;Web API Design&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.pluralsight.com/courses/implementing-restful-aspdotnet-web-api"&gt;Implementing an API in ASP.NET Web API&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h4&gt;Conclusion&lt;/h4&gt;
&lt;p&gt;So that's it. Or, I should say, "that's the start of it." If you have gone through these sections with any diligence you now have been exposed to the basics of what you need to know to be a web developer in the enterprise. Of course, now that you've been through all of this, there's still&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Logging&lt;/li&gt;
&lt;li&gt;Exception Handling&lt;/li&gt;
&lt;li&gt;Durability and Fault Tolerance (Queueing)&lt;/li&gt;
&lt;li&gt;Etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;But we'll leave those for another discussion. Now, go out and write some code, get some experience and be a Software Craftsman.&lt;/p&gt;
&lt;h4&gt;In this Series&lt;/h4&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 1&lt;/strong&gt; - &lt;a href="./on-software-getting-started-and-staying-relevant"&gt;On Software, Getting Started and Staying Relevant&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 2&lt;/strong&gt; - &lt;a href="./on-software-stacks-and-technologies"&gt;On Software, Stacks and Technologies&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 3&lt;/strong&gt; - &lt;a href="./on-software-net"&gt;On Software, .NET&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 4&lt;/strong&gt; - &lt;a href="./on-software-owning-your-brand"&gt;On Software - Owning your brand&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 5&lt;/strong&gt; - &lt;a href="./on-becoming-a-net-enterprise-developer-using-pluralsight"&gt;On Becoming an Enterprise .NET Web Developer using PluralSight&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description><pubDate>Tue, 16 Dec 2014 17:01:00 GMT</pubDate><guid isPermaLink="true">http://chuckcharbeneau.com:80/OnSoftware/on-becoming-a-net-enterprise-developer-using-pluralsight</guid></item><item><title>On Software, Agile Reading</title><link>http://chuckcharbeneau.com:80/OnSoftware/on-software-agile-reading</link><description>&lt;p&gt;If you want to support your agile activities with deep thinking and process guidance, I suggest you start at the top and work your way down this list.&lt;/p&gt;
&lt;p&gt;I added the third category because good agile practices and software craftsmanship go hand in hand. Please read the craftsmanship books as soon as you can if you are writing code or supporting / managing those that do.&lt;/p&gt;
&lt;p&gt;Finally, I am Microsoft leaning in my career, if you aren't, you can skip the TFS/Visual Studio centric titles.&lt;/p&gt;
&lt;h3&gt;Scrum and Agile&lt;/h3&gt;
&lt;p&gt;First Read this: &lt;b&gt;&lt;a href="http://scrumguides.org/"&gt;Scrum Guide:&lt;/a&gt;&lt;/b&gt; Seriously, it all starts here.&lt;/p&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/1EzNtYp"&gt;Software in 30 days&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/1slAOn3"&gt;Visual Studio Team Foundation Server - Adopting Agile Software Practices&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/10WaQfp"&gt;Professional Scrum Development with Visual Studio&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/1w35VCB"&gt;Agile Project Management with Scrum&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/1qqNSlj"&gt;Agile Estimating and Planning&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/1s0hiux"&gt;Agile Retrospectives, Making Good Teams Great&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/1vPwHiO"&gt;Agile coaching&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Theory and Practice&lt;/h3&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/1v7QqMR"&gt;Agile Software Development, The Cooperative Game&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/1qqOkzZ"&gt;The Agile Samurai, How Agile Masters Deliver Great Software&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/1ycLtDC"&gt;Continuous Delivery&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/1yQLWgb"&gt;Practices for Scaling Lean and Agile Development&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/1tGFgsU"&gt;Scaling Lean and Agile Development&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/1yQMtij"&gt;Practices of an Agile Developer&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/ZSrZWW"&gt;Agile Software Requirements: Lean Requirements Practices for Teams, Programs, and the Enterprise&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Software Craftsmanship&lt;/h3&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/J6gsdw"&gt;Clean Code&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/18CWaSC"&gt;Clean Coder&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/1rH4bO8"&gt;The Art of Unit testing&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/1nACzKU"&gt;The Pragmatic Programmer&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/1lWaycC"&gt;Working Effectively With Legacy Code&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/1jaZLw8"&gt;Agile Principles, Practices and Patterns in C#&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description><pubDate>Tue, 14 Oct 2014 13:38:00 GMT</pubDate><guid isPermaLink="true">http://chuckcharbeneau.com:80/OnSoftware/on-software-agile-reading</guid></item><item><title>On Software - Owning your brand</title><link>http://chuckcharbeneau.com:80/OnSoftware/on-software-owning-your-brand</link><description>&lt;p&gt;It's been nearly two weeks, and you have been diligently making your way through the various tutorials, on line content and examples listed in my previous two articles. And you've written a bunch of code and you're pretty excited and you have absolutely NO idea what to do next.&lt;/p&gt;
&lt;p&gt;Just about everything about us is on line. It is shared between platforms controlled by Facebook, twitter, tumblr, and instagram. The thing that these things don't give you is control. You are not their customer, you are their product, whose eyes and meta data they sell to advertisers, business and governments (no, this isn't a piece on data security, but it COULD be...). The thing that you aren't doing if you are only using these platforms is creating for yourself a brand. Be it personal or a business, a brand is a way of aggregating all of these platforms into a single message that represents you, and then using these platforms to disperse your brand in a controlled way.&lt;/p&gt;
&lt;p&gt;The skills that you are learning by following all of these tutorials and what not are the skills that allow you to not only create a baseline brand, but to also interface with all of these platforms to present yourself the way you want to be presented; to say nothing of giving you the ability to now help others to do the same.&lt;/p&gt;
&lt;p&gt;With the simple skills of HTML, JavaScript and a platform scripting language, you can now go off and interface with Wordpress, Orchard, Blogger, Joomla and several other blogging platforms. You can now create custom site templates, styles and plugins that bring together and present data in a new, unique and powerful way. You have the ability to use these platforms to create a brand.&lt;/p&gt;
&lt;p&gt;There are hundreds of websites with the basic building blocks out there (some free, some at minimal cost) to give you the jump start that you need. These html, css or platform templates will plug right into your engine du jour and propel you along the path of web design and development with the goal of learning how to create a brand.&lt;/p&gt;
&lt;p&gt;Check out:&lt;/p&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://bindtuning.com/cms/all"&gt;Bind Tuning&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.mezzoblue.com/zengarden/alldesigns/"&gt;CSS Zen Garden&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="&amp;quot;http://www.oswd.org/designs/browse/"&gt;Open Source Web Designs&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.templatemo.com/"&gt;templatemo&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://themeforest.net/"&gt;Theme Forest&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;You might also want to head off into the world of self managed hosting. For easy hosting solutions check out:&lt;/p&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.dreamhost.com/web-hosting/"&gt;Dream host&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.hostgator.com/shared"&gt;Host Gator&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://www.bluehost.com/cgi/info/hosting_features"&gt;Blue Host&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Most of these solutions will have one click installation of several popular blogging platforms that you can then dig in and modify, or you can go off on your own and create websites from scratch.&lt;/p&gt;
&lt;p&gt;And again, if you have other template sites or hosting services that you like, or you have any questions about any of these ideas, pipe up in the comments or reach out to me directly.&lt;/p&gt;
&lt;h3&gt;In this Series:&lt;/h3&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 1&lt;/strong&gt; - &lt;a href="./on-software-getting-started-and-staying-relevant"&gt;On Software, Getting Started and Staying Relevant&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 2&lt;/strong&gt; - &lt;a href="./on-software-stacks-and-technologies"&gt;On Software, Stacks and Technologies&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 3&lt;/strong&gt; - &lt;a href="./on-software-net"&gt;On Software, .NET&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 4&lt;/strong&gt; - &lt;a href="./on-software-owning-your-brand"&gt;On Software - Owning your brand&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description><pubDate>Sun, 29 Dec 2013 02:03:00 GMT</pubDate><guid isPermaLink="true">http://chuckcharbeneau.com:80/OnSoftware/on-software-owning-your-brand</guid></item><item><title>On Software, Stacks and Technologies</title><link>http://chuckcharbeneau.com:80/OnSoftware/on-software-stacks-and-technologies</link><description>&lt;p&gt;So now what? You've run through all of the Code Academy tutorials, enjoyed being able to build your own dynamic web pages and want to know how to write your own, robust web sites; to maybe head off on your own and help mom with her church mailing list or Bobby's soccer team track their schedule on line. You are wondering how to manage data, dynamically and conditionally generate HTML and are really confused as to what tools you should be using to write this code on your own machine and make it appear on the web at bobbysteam.com. You want to know where to go from here, and those are all excellent questions.&lt;/p&gt;
&lt;p&gt;The answer is, of course, it depends. It depends on several things, really. It depends on your server's Operating System, Web Server, Database and Programming language.&lt;/p&gt;
&lt;p&gt;It depends on your solution stack, specifically, your web stack.&lt;/p&gt;
&lt;p&gt;A web stack is one type of solution stack (an ordered collection of software that performs a particular task) that is the collection of software required for Web development. At a minimum a Web stack contains an operating system, a web server, a programming language, and a database software or a data management interface. This stack is used on the server to generate and deliver (dynamic) HTML/CSS/JS to a client browser.&lt;/p&gt;
&lt;p&gt;The stack you choose to pursue will dictate your development tools, you hosting environment and several other key systems&lt;/p&gt;
&lt;p&gt;In this discussion we are going to focus on the two most popular / in use stacks on the web, the LAMP stack and the .NET stack. There are other web-focused development stacks out there like Ruby on Rails [http://rubyonrails.org/] however, the top web based programming languages (according to TIOBE) are&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;C#/Visual Basic .NET&lt;/li&gt;
&lt;li&gt;PHP&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;Perl&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So our discussion covers these nicely, with the exclusion of #4. JavaScript is technically a part of the resulting output and not a part of any one particular stack (we will discuss TypeScript in a subsequent post, which actually is stack dependent in a way), but it's helpful to put into context how popular it is.&lt;/p&gt;
&lt;h3&gt;The LAMP Stack&lt;/h3&gt;
&lt;p&gt;The acronym &lt;a&gt;LAMP&lt;/a&gt; [http://en.wikipedia.org/wiki/LAMP_%28software_bundle%29] refers to first letters of the four components of the solution stack, composed entirely of free and open-source software.&lt;/p&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Operating System (OS): &lt;a href="http://www.linux.org/"&gt;Linux&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web Server: &lt;a href="http://httpd.apache.org/"&gt;Apache HTTP Server&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database: &lt;a href="http://www.mysql.com"&gt;MySQL&lt;/a&gt;, &lt;a&gt;MongoDB&lt;/a&gt; [http://www.mongodb.org/]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Programming Language(s): &lt;a href="http://php.net/"&gt;PHP&lt;/a&gt;, &lt;a href="http://www.perl.org/"&gt;Perl&lt;/a&gt;, or &lt;a href="http://www.python.org/"&gt;Python&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;The .NET Framework Stack&lt;/h3&gt;
&lt;p&gt;The .NET Framework [http://www.microsoft.com/net] [http://en.wikipedia.org/wiki/.NET_Framework] (pronounced dot net) is a software framework developed by Microsoft that runs primarily on Microsoft Windows. It includes a large library and provides language interoperability (each language can use code written in other languages) across several programming languages. Programs written for .NET Framework execute in a software environment (as contrasted to hardware environment), known as the Common Language Runtime (CLR), an application virtual machine that provides services such as security, memory management, and exception handling. The class library and the CLR together constitute .NET Framework.&lt;/p&gt;
&lt;p&gt;.NET Framework's Base Class Library provides user interface, data access, database connectivity, cryptography, web application development, numeric algorithms, and network communications. Programmers produce software by combining their own source code with .NET Framework and other libraries. .NET Framework is intended to be used by most new applications created for the Windows platform. Microsoft also produces an integrated development environment largely for .NET software called Visual Studio.&lt;/p&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Operating System (OS)&lt;/td&gt;
&lt;td&gt;&lt;a href="http://www.microsoft.com/en-us/server-cloud/products/windows-server-2012-r2/default.aspx"&gt;Windows&lt;/a&gt; (also, Linux, MacOS and others)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web Server&lt;/td&gt;
&lt;td&gt;IIS, Apache (with &lt;a href="http://www.mono-project.com/ASP.NET"&gt;mono&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Database&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.microsoft.com/en-us/sqlserver/default.aspx"&gt;SQL Server&lt;/a&gt;, MySQL, MongoDB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Programming Language(s)&lt;/td&gt;
&lt;td&gt;&lt;a href="http://msdn.microsoft.com/en-us/vstudio/hh341490.aspx"&gt;C#&lt;/a&gt;&lt;br /&gt; &lt;a href="http://msdn.microsoft.com/en-us/vstudio/hh388573.aspx"&gt;VB.NET&lt;/a&gt;&lt;br /&gt; F#, Perl, Python (Iron Python Variant)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;I've created a second post that provides a guide to web based .NET Programming and learning resources [https://www.facebook.com/notes/chuck-charbeneau/on-software-net/10152111633616248] as they are spread out across several locations and instead of being in a neat set of tutorials, rely on an ecosystem of highly skilled authors and presenters writing and producing for several print and e-publications to provide the necessary training and education at various learning levels.&lt;/p&gt;
&lt;h3&gt;In this Series:&lt;/h3&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 1&lt;/strong&gt; - &lt;a href="./on-software-getting-started-and-staying-relevant"&gt;On Software, Getting Started and Staying Relevant&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 2&lt;/strong&gt; - &lt;a href="./on-software-stacks-and-technologies"&gt;On Software, Stacks and Technologies&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 3&lt;/strong&gt; - &lt;a href="./on-software-net"&gt;On Software, .NET&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 4&lt;/strong&gt; - &lt;a href="./on-software-owning-your-brand"&gt;On Software - Owning your brand&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description><pubDate>Tue, 17 Dec 2013 21:38:00 GMT</pubDate><guid isPermaLink="true">http://chuckcharbeneau.com:80/OnSoftware/on-software-stacks-and-technologies</guid></item><item><title>On Software, .NET</title><link>http://chuckcharbeneau.com:80/OnSoftware/on-software-net</link><description>&lt;h3&gt;Development Environment&lt;/h3&gt;
&lt;p&gt;First things first, you'll want something other than notepad in which to write code. Microsoft provides several options for the would be .NET developer, including a free development environment called &lt;a href="http://bit.ly/1cPkKB7"&gt;Visual Studio Express&lt;/a&gt; and a more robust (for pay) environment, &lt;a href="http://bit.ly/1gEoOYC"&gt;Visual Studio&lt;/a&gt;, which students can actually download for &lt;a href="http://bit.ly/ITjsu6"&gt;free&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Unlike PHP, Python and Perl, .NET languages (C#, VB.NET and F#) are compiled languages like C++ and Java which requires a couple of other tools be installed on your machine, and an integrated development environment like Visual Studio will come with these things automatically.&lt;/p&gt;
&lt;h3&gt;Starting with C#&lt;/h3&gt;
&lt;p&gt;I highly recommend C# as the beginning .NET language for new developers. Learning the language idioms will help later on should you decide that you are interested in other languages like C++, Java or F#. To that end, I have listed below a series of links to web based tutorials and learning resources as well as a brief list of my favorite print resources for learning the language and the platform.&lt;/p&gt;
&lt;h3&gt;Microsoft Virtual Academy&lt;/h3&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://bit.ly/1fCqqPu"&gt;Aspiring Technologists Course List&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://bit.ly/1jfF04n"&gt;HTML5 &amp;amp; CSS3 Fundamentals: Development for Absolute Beginners&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://bit.ly/1dL2cAI"&gt;Programming in C# Jump Start&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;MSDN and Channel 9&lt;/h3&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://bit.ly/1kSUIxR"&gt;Getting Started Tutorials&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://bit.ly/J3hYNm"&gt;C# Fundamentals: Development for Absolute Beginners&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://bit.ly/18xo4BJ"&gt;Programming Concepts&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://bit.ly/1emIVKK"&gt;Developer Code Samples&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://bit.ly/ITjjqD"&gt;How Do I Videos&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a&gt;Getting Started with ASP.NET&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Non-Microsoft C# Resources&lt;/h3&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://bit.ly/1keuJDI"&gt;programmr&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://bit.ly/Jy2i5k"&gt;Pluralsight&lt;/a&gt; (pay service with free trial with thousands of hours of training videos for all technologies)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;Books (in order of Complexity)&lt;/h3&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/1fCjJgd"&gt;Illustrated C# 2012&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/18Ur3lO"&gt;Programming C# 5.0&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/1hZCxJZ"&gt;Pro C# 5.0 and the .NET 4.5 Framework&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/1c9YkfB"&gt;C# in Depth, 3rd Edition&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/1bcyeT2"&gt;CLR via C# (Developer Reference)&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3&gt;In this Series:&lt;/h3&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 1&lt;/strong&gt; - &lt;a href="./on-software-getting-started-and-staying-relevant"&gt;On Software, Getting Started and Staying Relevant&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 2&lt;/strong&gt; - &lt;a href="./on-software-stacks-and-technologies"&gt;On Software, Stacks and Technologies&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 3&lt;/strong&gt; - &lt;a href="./on-software-net"&gt;On Software, .NET&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 4&lt;/strong&gt; - &lt;a href="./on-software-owning-your-brand"&gt;On Software - Owning your brand&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description><pubDate>Tue, 17 Dec 2013 21:33:00 GMT</pubDate><guid isPermaLink="true">http://chuckcharbeneau.com:80/OnSoftware/on-software-net</guid></item><item><title>On Software, Getting Started and Staying Relevant</title><link>http://chuckcharbeneau.com:80/OnSoftware/on-software-getting-started-and-staying-relevant</link><description>&lt;p&gt;There is an infographic up on &lt;a href="http://code.org/stats"&gt;Code.Org&lt;/a&gt; today that shows the immense gap between the number of computer science related jobs and the number of qualified resources in the market now and coming into the market over the next 15 years. In Wisconsin alone, there are:&lt;/p&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;7,909 open computing jobs (growing at 3.6x the state average)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;781 computer science graduates&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;67 schools teach computer science&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;I think that it is fascinating that over the span of just one or two generations of users, computers have gone from esoteric machines hosted in the bowels of a university or government complex and the realm of uber-nerds to ubiquitous devices seen as merely appliances that we throw away when they break. The understanding gap, specifically in the United States (which is seriously lagging behind in STEM education as a whole), is that we still need Computer Hardware engineers to developer faster and smaller devices and Software Engineers / Developers to write the code that runs on them at all levels.&lt;/p&gt;
&lt;p&gt;The need for computer skills will continue to GROW as we embrace more technology and apply it to even more diverse areas of our lives, not diminish. Unfortunately, the number of Americans that can actually fulfill that need is dwindling, and it is making us much less competitive in the world.&lt;/p&gt;
&lt;p&gt;I'm a software developer and architect for a major player in the Microsoft ecosystem. Say what you will about the company, if you work in an office or own a PC, you are surrounded by code bits that run on their operating systems. This fact is not going to change, and companies all over the world, who live and breathe in this infrastructure are CONSTANTLY looking for innovative ways to improve their business, and it almost always includes software. As a company, we are under constant pressure to staff more people into roles at all levels and in all geographies, and we just don't have enough people with the right amount of skills.&lt;/p&gt;
&lt;p&gt;You, dear reader, can change that. You can do it at your own pace, and except for your investment of time, you can do it for free. There are a myriad of resources, focused at all levels of experience and desired skill sets, out there on the web that can get you the skills you need if you just apply yourself to learning them. From websites that focus on just learning and applying various software language skills to entire collegiate level Computer Science curricula, all the info you need is there to become a part of the solution.&lt;/p&gt;
&lt;p&gt;This entire discussion is predicated on the assumption that you are reading this and are already done with or not interested in going back to school. There is also an IMMENSE discussion here that should be focused around how and what educators need to be teaching in high school and at the Universities, and what the student / professional is responsible for once they are out in the wild. I FREQUENTLY talk to professors (I like to do campus outreach), and the general consensus is that the CS program at the university is not a trade school, and that students are coming to them to learn the philosophy and not the craft. This makes me want to scream and bash my head.&lt;/p&gt;
&lt;h3&gt;Just give me the skills&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://www.codecademy.com/"&gt;Code Academy&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Code Academy focuses on web based development, specifically:&lt;/p&gt;
&lt;ul&gt;
&lt;ul&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;HTML/CSS&lt;/li&gt;
&lt;li&gt;PHP&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Ruby&lt;/li&gt;
&lt;li&gt;Web APIs like Facebook, Twiter and others&lt;/li&gt;
&lt;ul&gt;&lt;/ul&gt;
&lt;/ul&gt;
&lt;/ul&gt;
&lt;p&gt;With a general understanding of JavaScript and HTML/CSS you could be writing dynamic web UIs as freelance work or with a company. PHP, Python and Ruby knowledge would expand those opportunities greatly, especially if you can then tie those sites in to any of the well known social and web platforms via their APIs&lt;/p&gt;
&lt;h3&gt;&lt;a href="http://www.microsoftvirtualacademy.com"&gt;Microsoft Virtual Academy&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The Microsoft Virtual Academy is focused on educating participants on the Microsoft Stack (technologies, tools and software built on and around the Microsoft platform). The developer courses are focused on .NET (C#, VB.NET), javascript, HTML5/CSS and the patterns and practices that are used to create successful, enterprise level applications.&lt;/p&gt;
&lt;h3&gt;University Style Learning&lt;/h3&gt;
&lt;p&gt;You might be the kind of learner that appreciates the philosophy as well as the practical applications, and to that end, I would highly suggest watching / listening to any of the great college curricula that are out on the web. Many of them include all of the test and assignment content to make studying approachable (though you would still have to get the appropriate texts in some cases).&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://ocw.mit.edu/courses/intro-programming/"&gt;MIT Open Courseware - Introductory Programming Courses&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://online.stanford.edu/courses/platform/Coursera"&gt;Stanford University&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.coursera.org/courses?orderby=upcoming&amp;amp;cats=cs-theory,cs-systems,cs-programming,cs-ai"&gt;Computer Science on Coursera&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.whydontyoutrythis.com/2013/10/a-college-education-can-now-be-found-on-the-internet-for-free.html"&gt;edX&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Education and Continuing Education&lt;/h3&gt;
&lt;p&gt;"But wait," you say. "I am already IN the software workforce, what should I be doing?"&lt;/p&gt;
&lt;p&gt;To that I respond, "All of the above, and then some." Hone your craft, learn new skills, mentor others and be better than you were yesterday.&lt;/p&gt;
&lt;p&gt;I constantly rail at profs that "Clean Code" and "The Clean Coder" coupled with a strong practice of TDD (or ANY testing theory) HAS to be a part of the practice taught to students. The departments could have the TAs address it in their rec classes, it could be a required 200 level class, ANYTHING...SOMETHING, but you NEED to know (or have at least been exposed to) this stuff when you get to me. It's inexcusable that students aren't better versed in the basic tenets of their chosen craft. Once you are in the workforce, it is no different. I personally believe that we, as Computer Scientists, must CONSTANTLY reflect on our craft and its practice, and make the effort to both hone our own skills and to mentor others.&lt;/p&gt;
&lt;p&gt;If you are in the software development field (or want to be), and you haven't read Uncle Bob's books, you should really stop whatever it is you are doing and go and do so, and then come back and we can talk about Craftsmanship and Practice.&lt;/p&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/J6gsdw"&gt;Clean Code&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/18CWaSC"&gt;Clean Coder&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;And while you are at it, take a small drive through Test Driven Development. Now, I realize that TDD is a religious argument for some, but testing MUST be a part of the practice of your craft, I don't care if it's test first or not, or if it's TDD, BDD, DDD, ADD, ADHD or whatever. You MUST know how to test your code, and starting your testing journey by thinking about your tests first might fix some of the bad habits that I know you (and I) have.&lt;/p&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="http://amzn.to/IFuanP"&gt;Test Driven Development: By Example&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;If you have other favorite learning sites or books on the craft of development, post them in the comments, and lets raise the awareness of this opportunity and the skills of those that are interested.&lt;/p&gt;
&lt;h3&gt;In this Series:&lt;/h3&gt;
&lt;table class="table table-striped"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 1&lt;/strong&gt; - &lt;a href="./on-software-getting-started-and-staying-relevant"&gt;On Software, Getting Started and Staying Relevant&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 2&lt;/strong&gt; - &lt;a href="./on-software-stacks-and-technologies"&gt;On Software, Stacks and Technologies&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 3&lt;/strong&gt; - &lt;a href="./on-software-net"&gt;On Software, .NET&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Part 4&lt;/strong&gt; - &lt;a href="./on-software-owning-your-brand"&gt;On Software - Owning your brand&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description><pubDate>Thu, 12 Dec 2013 05:52:00 GMT</pubDate><guid isPermaLink="true">http://chuckcharbeneau.com:80/OnSoftware/on-software-getting-started-and-staying-relevant</guid></item></channel></rss>