Skip to content

Using Rake to Make Your Builds Majestic

Rake is a software task management tool, written in ruby for managing ruby projects. By leveraging gems like albacore, rake can be used to automate tasks such as builds, configuration, assembly versioning, database deployments, unit testing, etc. for .NET projects as well. Nicholas Cloud talks about some of these features, and how you can use rake in your .NET environment with minimal friction and maximum synergy! Be sure to bring your hard hats folks.

Categories: ALT.NET, Rake, Ruby, STL ALT.NET.

Tags: , , , , ,

So you want to be a .NET dev…

A friend of mine (we’ll call him Bernard) introduced me, via email, to a friend of his (we’ll call him Walt) who is a recent computer science graduate.  Walt is examining his career options right now, and is curious  about .NET development, so Bernard asked if I would give him an overview of technologies and maybe a little career advice, as someone who has been in the field for a while.  Here is my response (edited for fat-finger blunders).  If anyone has additional insight they would like to share with Walt, please leave a comment and I will pass it along!


Hi Walt, nice to meet you!

The first thing I would say is that if you are thinking about .NET development (or business development in general), its going to be a bit different than the programming you do in a comp-sci course, or academic programming in general.  There tends to be a lot fewer algorithms and data structures, and a lot more “big data”, system integration, and system scaling that happens in business.  So if you really enjoy the math, science, and “number crunching” aspects of programming, you might want to consider the financial and/or scientific sector(s), with languages like C, C++, Lisp, Clojure, Scheme, etc.  Or maybe even embedded systems or hardware programming.

.NET (and Java) tend to be the big “enterprise” platforms, meaning that they are used to run big line-of-business applications.  If this is interesting to you (or you don’t really care), then you can’t go wrong with either of these two platforms.  I started doing web development in PHP on Linux, but through a series of unfortunate, er, I mean, unforeseen events, became a .NET developer.  I’ve been doing .NET for about 5 years now.  One thing I can say is to steer clear of VB.NET, and focus on C#.  The syntax in C# will feel much more familiar if you are already accustomed to C/C++/Java.  And it gets the most love from Microsoft and .NET devs, has the most language features, and is generally respectable.

1. Technology

If you want to do web development on the Microsoft stack, ASP.NET MVC is Microsoft’s hottest web technology.  I use it every day.  Their legacy web technology, WebForms (commonly referred to as ASP.NET, though both WebForms and MVC are built on ASP.NET technology), is still widely used in businesses (and Microsoft still actively releases updates for it), but it is falling out of favor with developers, and most new projects embrace MVC as the future of MS web dev.  I will tell you right now: MVC is much easier to learn than WebForms.  WebForms is a beast from hell.  It is fugly, bloated, hard to test, and easy to swear at, but still worth knowing if you are serious about being a .NET developer.  So if you want to do web stuff, read up on both of these technologies but focus mostly on MVC.  Also, you will need to have a strong grasp of HTML, CSS, JavaScript, and jQuery (a JavaScript abstraction library) to be successful in web as well.

If you want to do desktop development, WPF is where its at.  Microsoft’s legacy technology, WinForms, is still supported though many new projects are WPF-based.  The differences in these technologies revolve mostly around how the user interfaces are constructed, and what capabilities they have.  It can’t hurt to learn either, or both — but if you have to make one a priority, make it WPF.

I will mention Silverlight here briefly, just to say that it is kind of the red-headed step-child of Microsoft technology right now.  It was supposed to bring desktop-like programming to the browser (this goal, incidentally, always meets with failure, e.g. Java Applets and Flash), but Microsoft has quietly sidelined much of its development in favor of standards-based web technologies like HTML5.  The good news is that Silverlight skills are similar to WPF skills, so even if you were on a project where you had to develop in Silverlight, the experience isn’t a loss.

Microsoft has several service-oriented technologies: ASMX which relies on ASP.NET and must be hosted in the IIS web server, and WCF which can be hosted in IIS or in a separate process running on the machine.  WCF is the hotness and ASMX is out-of-favor for new development, though you will still find ASMX in the wild in legacy systems.  WCF is a beast — don’t approach this until you are somewhat familiar with the .NET framework as a whole.

As far as data access technologies go, Microsoft has three (well, two-and-a-half really) that you should know.  ADO.NET is the base data access technology upon which all others are built.  Entity Framework is Microsoft’s object/relational mapper (mapping classes to database tables), and Linq2SQL is Entity Framework’s annoying little brother that no actively uses anymore (trivial projects and existing Linq2SQL maintenance are the exceptions).  You will definitely need to understand how ADO.NET and EF work to write productive .NET applications.

So these are really the application-specific technologies that you will want to learn, but there is also the framework itself and its core libraries.  This brings me to my next section:

2. Resources

If you are serious about .NET, I would highly recommend “Pro C# 2010 and the .NET 4 Platform” by Andrew Troelsen.  Do not be frightened by the size of the book — he has chapters that cover most of the .NET framework in a very digestible way (including chapters on ASP.NET MVC/WebForms and WPF/WinForms).  He begins with core types like string, int, float, byte, etc., as well as .NET application models, memory management, how the CLR runtime executes .NET code, etc.  Its very thorough, and very easy to read.  I get an updated copy of this book whenever a new version of .NET is released because I find it that helpful.  Another good book is “C# 4.0 in a Nutshell” by Joseph Albahari.  It’s not as thorough as Troelson’s book, but you can get a quicker overview of the framework, if that’s what you’re looking for.  Also, I would highly recommend browsing through the videos on TekPub’s website.  They have in-depth videos on C#, ASP.NET MVC, and WebForms that are all worth the money.  The videos are high quality and very informative.

It would also be beneficial for you to get involved in a .NET user group, wherever you happen to be located.  There are two in St. Louis: the STL .NET User Group, and the ALT.NET User Group (I run the latter).  User groups are a great way to meet people who are already knee-deep in .NET and hear detailed technical presentations.  St. Louis also hosts a .NET conference every year called St. Louis Day of .NET, and Kansas City runs a .NET conference called KCDC.  Both conferences are reasonably cheap, and you will get a lot of exposure to different .NET technologies.  If you’re not in the St. Louis area, check and see if your area has conferences or user groups available.  A quick Google search should tell you pretty quickly.

3. The Tools

This is probably going to be the sucky part for you, because while Microsoft tooling is great for .NET, it also costs a small fortune to purchase.  Microsoft’s flagship IDE, Visual Studio, can be purchased with an MSDN subscription for about $800 (professional version).  Microsoft provides “express” versions of some of its products, and while they are adequate for doing small trivial projects, or just learning C#, they are severely crippled and sometimes even do things differently than their commercial counterparts.  (For example, VS Express creates projects a bit differently than VS Pro, which can be confusing if you move from one to the other.)  Still, for getting started they are your best option, unless you can get the software through your university, which would be even better.  There is an open source implementation of .NET called Mono, and there is even an IDE for it called MonoDevelop, but it does not enjoy wide use and does not support all the framework/language features that VS does.  So the Express editions are probably better for learning.  There is also an express edition of SQL server, which is actually quite good, and unlike VS Express, it merely lacks advanced features but otherwise performs identically to full-blown SQL server, so it is a great product on which to learn.

4. Getting Work

St. Louis is big contracting town, so there are tons of staffing agencies and headhunters trying to place technical talent at companies in the area.  St. Louis is also a huge stronghold for .NET and Java, and right now the .NET market is definitely a developers’ market.  Recruiters can typically help “get you in the door” at a company, but most of the ones I have talked to are looking for experienced professionals.  This is not to say that there are no entry-level jobs–I just have no knowledge of whether there are or not.  I could send you the names of some staffing agencies here in the area, if you would like, and you could start dialogues with them to see what opportunities are available.

I would also highly recommend getting involved in .NET open source projects.  Github.com hosts a huge number of .NET open source projects, and allows you to create a free basic account so that you can participate in development.  This looks really good on a resume (there is even a website called GitHire that shows which developers in a given area are most active on Github), and you can learn a lot from reading other peoples’ code.  This will require you to become familiar with Git, an open-source version control system, but I would recommend that anyway because it is quickly becoming the version control system of choice for many .NET shops.

Ok, so I know this was a long-winded email, but I think I covered the basics.  If you have any questions (on technology or your career), feel free to ask.  Godspeed, and good luck.

Categories: Career.

Tags: ,

Accelebrate sponsors STL ALT.NET

I am happy to announce that STL ALT.NET is now sponsored by Accelebrate, an Agile software development training company.  They have provided us with a generous quantity of Mike Cohn’s excellent book “Succeeding with Agile: Software Development Using Scrum” to use as raffle swag during the next several meetups.

Accelebrate offers intensive Agile training, as well as courses in .NET, SharePoint, SQL Server, Java, and other technologies.  Their training is provided by people who have experience in the field, and occurs on-site to keep training overhead low.  If you would like more information, feel free to contact Accelebrate or follow them on Twitter.

Categories: STL ALT.NET.

Tags: , , , ,

Persistence

“He who accepts life for what it is and never allows himself to be overwhelmed by it does not need to seek refuge for his crushed self-confidence in the solace of a ‘saving lie’. If the longed-for success is not forthcoming, if the vicissitudes of fate destroy in the twinkling of an eye what had to be painstakingly built up by years of hard work, then he simply multiplies his exertions. He can look disaster in the eye without despairing.” — Ludwig von Mises, Liberalism

Categories: Quotes.

Tags: , ,

Things on which I am stewing

I have about an hour before the November STL ALT.NET meetup begins, so I thought I would quickly jot down some things on which I have been stewing for the last few months, not because I think you will find them particularly interesting but because writing is therapeutic and often leads to greater clarity of thought.

Who I follow on Twitter, and why

I recently spent some time organizing my twitter feed into lists and browsing Twitter’s “follow” recommendations.  Before I follow someone, I browse their current tweets to see if I am interested in what they are saying.  I like people who are focused with their content.  When I look at a person’s tweets, there is some threshold that I have–some content litmus test that I use–to determine if the bulk of what they write on Twitter is valuable enough for me to follow them.  For developers, it boils down to: how much do you tweet about development, or development-related topics?  If I glance at a Twitter stream and the bulk of what I see is not related to development, I probably won’t follow the Tweeter. (Is that even a noun?)  Another criteria I have is the quality of content people retweet or link to.   Twitter can be a tremendous place to find great articles, blog posts, open source projects, etc., but not all content is created equal, and I consider trivial links or retweets to be a form of spam.  But again, I have a personal standard for judging what is “trivial” that other people might not agree with.

I would be interested to hear from others who also screen potential Twitter follows, and what methods or standards they use.

I’m not learning Rails

I attended two Ruby conferences this year: Ruby Hoedown and Ruby Midwest.  I thoroughly enjoyed myself at both conferences, and I learned a lot.  I enjoy Ruby as a language.  We use Rake at work, and I enjoy writing Ruby code to make my build tasks easier.  Rails is a powerful framework for RAD development, and the sheer volume of helpful gems that are available for Rails is quite impressive.  The reason I am not going to learn Rails, however, has nothing to do with the quality of the Ruby language or the Rails framework or the Ruby community (which is fantastic).  After stewing for quite some time on my dissatisfaction (or rather, disinterest) in Rails development, I came to a point of self-realization.

I don’t want to learn Rails because I don’t want to write CRUD applications.  And Rails is a framework targeted specifically at CRUD developers.

Can you use Rails in a non-CRUD oriented way?  Yes–but a significant portion of Rails gems, websites, articles, discussion boards, videos, books, etc. are all CRUD-centric; only a precious few breach convention.  And most Rails developers see this strong CRUD emphasis as a feature, and indeed they should, because Rails solves many problems quite elegantly; it is the right tool for many jobs.

So, Rails, it’s not you–it’s me.

I really want to become better at domain modeling

My real passion–one that has been developing for several years in the quiet recesses of my frontal lobe–is domain modeling.  The technologies and methods to which I find myself attracted (Domain Driven Design, CQRS, etc.) are all concerned primarily with encapsulating domain logic and separating it from implementation details like persistence, the user interface, remote services, etc.  This stands in direct contrast to common CRUD methodologies which often wed, for the sake of expediency and conceptual simplicity, “domain classes” and the UI, persistence, and/or service layers.  Both models have trade-offs.  But I have been programming in a (more-or-less) CRUD-oriented way for years now, and I want to grow beyond that.

The distinction between these two modes of development became very clear to me at Ruby Midwest, where I watched Uncle Bob give a presentation on this very topic.  I realized that (from what I have seen) this discipline is fairly neglected in general business development.  Maybe it is just assumed that developers have this knowledge already.  I suspect, however, that the familiar nature of CRUD, and the quick gains it achieves in the short-term are the real justifications reasons why most projects start–and remain–CRUD-centric.

As I work through this gradual shift in my development paradigm over the next few years, I will write more about the things I discover.

As always, I’m interested in feedback.  Give me your opinions.  Really, I can take it (with scotch, on the rocks).

Categories: All About Me, Software Development.

Tags: , , , , , ,

Naming interfaces

Interfaces in .NET have a specific naming convention.  They begin with a capital “I”, followed by some text that indicates what the interface represents.  IEnumerable is a classic example; it means the implementing object can be enumerated.  This naming convention, however, is pretty unique to .NET.  In the Java world, interfaces do not have a special prefix to indicate that they are interfaces.  Java, unlike .NET, uses two keywords, “extends” and “implements”, to indicate whether a class is participating in an inheritance hierarchy and/or representing some behavior, respectively.  In .NET, we use a simple colon and rely on the ordinal position of the class/interface names that come after to indicate the same.

The prefix “I” used for interfaces is seen by many (myself included) as unnecessary.  It serves no useful purpose other than to provide a visual cues to developers, allowing them to identify interfaces quickly while coding.  Java IDEs typically provide these visual cues so that developers don’t have to rely on a naming convention for this purpose.

Eclipse example 1

Eclipse example 2

Visual Studio has visual aids as well, but they are not as obvious, in my opinion.

I do think a naming convention for interfaces is still a good idea, but I don’t think the prefix “I” is necessary.  Instead, I would like to propose that interfaces be named for the behavior that the represent, starting with a prefix like “Can”, or “Will”, or “Has”, followed by a description of that behavior.  For example:

  • IEnumerable becomes CanEnumerate
  • IDisposable becomes CanDispose
  • IQueryable becomes CanQuery
Not only is this naming convention more descriptive and less contrived (sometimes it is difficult to come up with an interface name like IXyzable), it forces developers to really think about the behavior they are trying to implement, and may dissuade them from creating interfaces that have nothing whatsoever to do with behavior.  (The sudden explosion of IOC mania has obscured the real purpose of interfaces, but that is another topic for another time.)
If you have thoughts on this topic, I’d be interested to hear them.

Categories: C#, Software Development.

Tags: , , ,

Indeed.com job trends by programming language


c#, python, ruby, java, javascript, php Job Trends graph

Categories: Programming Languages.

Tags: , , , , ,

Linus Torvalds on Project Management

“The first thing [people get wrong about open source projects] is thinking that you can throw things out there and ask people to help… That’s not how it works. You make it public, and then you assume that you’ll have to do all the work, and ask people to come up with suggestions of what you should do, not what they should do. Maybe they’ll start helping eventually, but you should start off with the assumption that you’re going to be the one maintaining it and ready to do all the work… If you start off with some ‘kumba-ya feeling’ where you think people from all the world are going to come together to make a better world by working together on your project, you probably won’t be going very far.” — Linus Torvalds (full article)

Categories: Open Source, Project Management, Software Development.

Tags: , ,

Strange Loop 2011

During the weekend of September 18th, St. Louis became a geek mecca for three days while the third annual Strange Loop conference was in full swing.  The Ballpark Hilton was stormed by nine hundred code slingers who came from the four corners of the earth to revel in the aura of their heroes and vigorously engage in religious wars about their favorite technologies.  It was pretty damn glorious.  Strange Loop is the brainchild of Alex Miller: gentleman, community leader, founder of Lambda Lounge, and parentheses parser extraordinaire.

Here is a brief recap of the best sessions I attended, and my overall impression of the conference this year.

Sunday

Sunday was broken up into two three-hour workshops, followed by a dinner with conference speakers.

  • Introduction to Clojure.  Clojure gets a lot of love at Strange Loop.  It’s a functional language in the Lisp family that runs on the JVM.  The workshop was conducted by Stuart Sierra, co-author of the Apress title Practical Clojure.  A three hour introduction to anything is bound to be pretty intense, and this workshop didn’t disappoint.  I felt like I was drinking from the Clojure firehose the entire time.  Stuart did a deep dive into language syntax, types, conventions, etc. while attendees followed along in their REPLs.  Stuart is a very good presenter, and in general I found the session to be quite informative.  My only critique is: he spent too much time on data deconstruction, and I believe it cost him time at the end of the workshop, so he was unable to cover all of the material he had prepared.  I think it would have also been nice to see examples of Clojure programs “in the wild”–demonstrations of what can really be done with the language (beyond a slide deck).
  • Introduction to Django.  There are two OOP scripting languages that Strange Loop folk aren’t afraid to admit they use: Ruby and Python.  Of the two, I am more interested in Python, and so I decided to attend a workshop on Django, a popular Python web framework.  Of all the sessions at Strange Loop, I probably learned the most from this one, primarily because I had been working through the Django tutorial already, and also because Jacob Kaplan-Moss is a great presenter.  He walked attendees through the creation of a small Django application, from start to finish, while explaining every key concept in detail as we worked.  It was well-paced, everything was very clear, and really illustrated how Python is simultaneously unassuming and powerful.  Django is similar to other MVC frameworks (Rails, ASP.NET MVC, Symfony) but, more than any other, favors simplicity over, well, anything.  It has no “controllers” per se–each HTTP action is mapped to a Python function that invokes the model and renders a view.  It reminded me of Sinatra in some ways, but with a bit more plumbing.  The configuration cascades, so things defined at the global project level can be overridden in each module (or “app”).

The speaker dinner was very nice — I sat at a table with Bill Odom and Mark Volkmann, local Midwest speakers whose sessions I attended on Monday.  The food was good, the bar was open, the company was nerdy, and a good time was had by all!

Monday

The problem with Monday was that there were too may good concurrent sessions, and I could only choose one to attend for each time slot.  This seemed to be a common lament for tweets adorned with the #strangeloop hashtag.

  • Category Theory, Monads, and Duality in (Big) Data.  Erik Meijer (Microsoft) opened the conference with a keynote about the “duality” of noSQL systems and traditional RDBMS storage architectures.  Duality, in this context, does not refer to the Slipknot song (that would have made the talk far more exciting), but rather to the mathematical concept wherein two things share a special relationship because one is a reflection of the other, but with inverted properties.  Meijer’s point was that noSQL systems and RDBMSes share a similar, fundamental approach to storing data, but differ about how dependent data is referenced (think: foreign keys).  In an RDBMS, dependent data points to its principle, but in noSQL systems, the principles point to their dependents.  Meijer’s conclusion was, therefore, that noSQL should be re-branded as “coSQL”, because it is complimentary, not antithetical to, RDBMSes.  I’m not entirely sure what I think about his conclusions.  I am not as mathematically literate as I would like to be, but whenever I hear someone claim that: “you know, X is really just a special case of Y” I get a little nervous, mostly because abstractions can be easily frozen.  Because we have been dealing with RDBMSes for so long, it is easy to slip into a pattern of seeing all data storage as a variation of the relational pattern, and possibly missing the unique things that noSQL solutions offer.  But I don’t think this was Meijer’s intent, nor do I think most people would come to this kind of conclusion.
  • CSS3 and Sass.  In this session, Mark Volkmann talked about the new CSS3 features added by the W3C in recent years.  CSS is the mainstay of web design, and some of the additions to the CSS specification are quite exciting.  More importantly, Mark also talked about the Ruby gem Sass.  Sass does for CSS what jQuery did for JavaScript — it creates a thin abstraction layer over CSS that supports nifty things like variables, mixins, selector inheritance, selector nesting, functions, and even the ability to do away with curly braces in CSS files forever!  Sass files are syntactically very similar to CSS–in fact, pure CSS can be placed in a Sass file and Sass will work just fine.  The Sass executable accepts the Sass file as input and generates a normal CSS file as output.  It can even be set up to “watch” a directory, and any changes to Sass files in that directory will trigger automatic CSS generation.
  • Building Applications with jQuery UI.  I’ve used jQuery for a while, and I’ve used jQuery UI on a number of projects, so much of this session was a refresher for me.  Scott Gonzalez, development lead for jQuery UI, talked about effects and widgets libraries, covering each in brief.  A significant amount of time was spent demonstrating how a developer could tap into the jQuery UI API and make custom widgets, which was particularly interesting to me because I had not yet tried my hand at it.  I was delighted to discover how simple and elegant the widget API is.
  • A Tale of Three Trees.  Last year I took a job at Fpweb.net.  Until that time I had only worked with centralized version control systems, but at Fpweb, the development team uses git.  It took me several weeks to become comfortable with the git workflow, and a few months before I actually began to understand git internals.  In this presentation, Scott Chacon explored the git –reset command; specifically how it impacts the user’s working directory, the index, and the current working branch.  Reset takes one of three arguments for manipulating source files: –soft, –mixed, and –hard.  Previously I had only used –hard to nuke changes that I knew I didn’t want.  This effectively forced my working directory and index to reflect the HEAD pointer in git.  The –mixed argument removes commits from the git index (but leaves the changes as uncommited), and the –soft argument allows you to move the HEAD pointer without destroying changes in the working directory or the index.  Scott talked about several interesting (and somewhat terrifying) things you can do with reset, like create “phantom” commits of files that never existed in the working directory, or magically materialize branches by directly manipulating the git index.
  • Vim: From Essentials to Mastery.  Since I’m a .NET developer I don’t use vim daily, but I’ve been making a concerted effort to use it for side projects and learning new languages on the *nix platform.  Vim is undoubtedly a powerful editor; it supports a massive variety of language syntaxes, and has more plugins than you can shake a stick at.  The initial learning curve is steep, since there are lots of keyboard shortcuts that have to be committed to memory, but the shortcuts all follow intuitive conventions and the productivity gained by never removing your hands from the keyboard is significant.  In this session, Bill Odom covered a handful of “must-know” commands, talked about some very useful plugins (like NerdTree), and took general-use questions from the audience.  When Odom started talking about registers, he quickly went over my head, but the “essentials” were great stepping stones in my journey.
  • We Really Don’t Know How to Compute!.  Gerald Sussman is pretty much the patron saint of functional programming.  His seminal work Structure and Interpretation of Computer Programs is a classic text in computer science.  I’m pretty sure he invented parentheses.  The general demeanor of attendees in his presence was a mix of awe and adoration, sprinkled with a side of childlike hero worship.  Dr. Sussman’s keynote presentation began with the observation that the human genome is a supremely compact collection of information that is used to create complex life.  Modern computation, in comparison, is painfully inefficient and inaccurate, and is used to produce wonders like Angry Birds (my words, not his).  Unfortunately, that is about all I got from his keynote, as the remaining hour or so was a high-speed roller-coaster ride through electrical engineering, physics, and LISP.  But at least I wasn’t alone–the live tweets during his presentation consisted of two basic reactions: “OMG what a genius!” and “Owwww my head!”  I realize that Dr. Sussman is used to speaking to graduate students who are steeped in the halls of higher education, but I do wish he would have tempered his presentation for a lay audience that could have gotten more out of it.  Still, I take his presentation as a personal challenge to improve my understanding, and perhaps if he speaks again in the future I’ll be better prepared.

Tuesday

  • Teaching Code Literacy.  I had the privilege of sharing a lunch table with Sarah Allen on Monday, and our brief conversation about programming and education piqued my interest in her session.  I’m glad I attended; it was easily one of the best sessions at Strange Loop.  As an experiment, Allen created a game called Pie Bakery to teach students the basics of programming.  The game framework is written in Ruby, but she created a Ruby-based DSL called Pie that students use to create their own game instances.  Pie is a stripped-down, simplified language that focuses on core programming concepts and makes it very easy for students to grasp what the program is doing.  While working with students, Allen made two key observations that I thought were very interesting.  First, students were far more likely to continue programming when feedback from their code was immediate.  The Pie Bakery application can run a game as soon as its basic structure is defined, so students could see the results of their effort immediately.  The second observation she made was that students were more likely to persevere when errors were encountered if they were programming in a group setting.  The social aspect of programming made the debugging activity less tedious.  These two observations, I think, can be roughtly translated into the Agile principles of immediate feedback via continuous delivery, and pair programming.
  • The Future of F#: Type Providers.  The (handful) of .NET developers at Strange Loop were very excited about this talk, as it was the only Microsoft-oriented session at Strange Loop.  Yes, we had a small room, and yes, everyone tried to slip in unnoticed to avoid the mocking glares of the Haskell and Clojure fanbois, but we learned a lot and had fun doing it.  Joe Pamer, development lead for F# at Microsoft, talked about F# Type Providers, a new way to query data from nearly any source, in a strongly typed way, without using reflection or code generation, and with all the benefits of Intellisense.  If it sounds like magic, it pretty much is.  Basically, a data source (such as a database, web service, OData feed, etc.) defines a data “schema” which can be understood and deconstructed into objects, properties, namespaces, etc.  Type providers can read this schema, and provide data to the IDE at design-time that will make it appear as if strong types based on that schema have been generated, but in reality, only IL will be generated when the project is compiled.  Pamer also talked briefly about the F# tooling improvements in VS2011; sadly, there will be no refactoring support, but the language remains a first class citizen in the IDE, so we can expect a better integration experience.
  • “Post-PC Computing” is not a Vision.  Allen Wirfs-Brock, Mozilla Research Fellow and member of the ECMAScript standards committee, talked about the “post-PC computing” mantra, and how it is really a simple statement of future change, but not a statement of vision at all.  Apple and Microsoft didn’t have a “post-mainframe computing” vision; they had very specific ideas about bringing computers into the home, into the hands of normal people.  It was this specific vision that allowed them to succeed.  The future of computing, Wirfs-Brock argued, is definitely a web-centric vision, at the core of which will be a shared, ubiquitous language: JavaScript.  He spent the latter half of the talk reviewing new changes to the ECMA standard, and how JavaScript is finding a home, not only in the browser, but on the server as well.
  • Simple Made Easy.  If Gerald Sussman is the patron saint of functional programming, Rich Hickey is at least a Bishop.  Maybe even the Pope.  His homage to LISP, the Clojure programming language, was definitely a pet favorite of attendees and presenters alike, and for good reasons–it is terse, powerful, and has a pretty sweet logo.  Anyway, Hickey talked about the concepts “simple” and “easy”, and how they are really two different ideas that often get equivocated in software development.  He talked about the etymology of each word: “easy” refers to the comfort level a person feels when doing something they are familiar with, whereas “simple” refers to a thing and its complexity (or rather, lack of complexity) in relation to other things.  Hickey contends that developers are too focused on things that are “easy”, that they feel more productive with things they are already familiar with, or that have lower barriers to adoption (fits within an existing environment, team-mates already know the technology, already approved by the authroitah!, etc.).  Unfortunately easy things are not necessarily simple things.  The word “simple” emerged as a way to describe a rope which only had a single strand, in contrast to a complex rope which consists of multiple strands that are entangled in a braid.  Simple software should avoid complex entanglements; it should do one thing, and one thing well, and it should be carefully decoupled from its dependents.  This not only makes software maintainable and extensible, it also makes it easier to understand.  The human brain can only focus on a handful of ideas at one time, so when software is complex (i.e., tangled, intertwined), a developer is more likely to forget essential pieces of information when writing or changing that software.  By carefully thinking about the nature of the software we write, and by choosing languages and tools that promote “simple” development (not necessarily “easy” development), developers can write better, more maintainable software.

Closing Remarks

Strange Loop is definitely becoming one of the premier software conferences in the country.  The conference cost is relatively low compared to the quality of sessions, speakers, keynotes, networking, and tangential events that attendees get every year.  If I could only attend one conference a year, it would be Strange Loop.  It challenges me to look beyond the things I am familiar with, and expands my knowledge of tools, processes, and approaches to being productive and solving software problems.  So, to Alex Miller and every speaker and attendee at Strange Loop 2011, I say thank you, and I’ll see you next year.

Categories: Conferences, Strange Loop.

Tags: , ,

CQRS and Event Sourcing with NCQRS

At the August 2011 STL ALT.NET meeting, Nicholas Cloud talks about the CQRS and Event Sourcing — architectural patterns for building highly scalable and reliable systems — using the open source .NET implementation, NCQRS.

CQRS and Event Sourcing with NCQRS from STL ALT.NET on Vimeo.

EDIT: mynkow posted a minor correction to my presentation on the NCQRS Google group:

“Around 1h and 15m is not true. The internal event handler is called when you call ApplyEvent(). That is with the current code base there is no need to create internal handlers.”

Categories: ALT.NET, CQRS, Event Sourcing, Software Development, STL ALT.NET.

Tags: , , , ,