I’m a software engineer working in Dayton, Ohio. I work for a fantastic company – Smart Data Systems . We like to build modern web application solutions using the latest front end development including Angular, Angular2, and ReactJS. On the server-side we like to use NodeJS (with Hapi and Postgres) to build out our API’s.
I’m married to my wonderful wife Gina and I’m a proud father of 3 boys – Jake (who is at Ohio University), Tyler, and Evan!
I enjoy sports outside of programming and I’m an avid basketball fan who enjoys coaching youth basketball – as well as a proud follower of The Ohio State University football team.
Last, but the greatest – I serve my Lord, Jesus Christ. Without Him there would be nothing. He has blessed my life with His grace and mercy.
7 thoughts on “Who Am I?”
I must say I am very, very impressed by your thoughts and let me also say thank you for the link in your NHibernate story.
Seriously, I never hear people discuss the problem of ‘choices they make in things like Castle/Spring/NHibernate in ways that make sense.
For example most start and often never get far beyond the old concerns being maintained simply moved over regardless of their need in the new world. And as you make clear so well this is only about the enablement of a concept not the tool being and end to it self. Even ReSharper.. Universal love and I’m even their reference on the home page.
But if it was not above the process/actvity/best practice of refactoring and an ability to even achieve the level you really need, the manual alternative would never catch on. I cannot even get people with Resharper to get this so they never use what I use obsessively ‘extract method’ which perhaps should be even more common then an if statement being written! OK perhaps not but at least once per 10 lines of code I think. Damn it’s hard to generalize that. But I digress…
Back to the issues people obsess on I am mostly asked about
1) direct SQL
2) stored procs
3) Getting their connection for my other non NH queries
4) etc…
I teach NHibernate (have for 2 years in NYC to corps direct not public classes as employers refuse to pay or no open source policies). I learned I need to give a small speech before I start. I’ve not done a system without it for about as long and these are typically in the 1-20 million range typically 2-5 countries – and all the fun that includes. :
“So why care about NHIbermate. I’m not here to teach for the money or you might think I don’t care that much if we succeed in the next few days. That is the only reason I am here in fact as I technically loose money doing this. But know I enjoy this at times far more then anything else I do. That’s up to you (grin)..
So I would like to hear from you. Any comments on why you are here instead of working on I am sure some critical fires?
I get things like:
NHibernate is important to us because:
‘It sucks the slower execution but well I guess there is less testing hopefully’
‘We can not have to be so reliant on our DBAs to do make changes so we can be more productive’
‘By generating the DAL our core objects become SOA enabled as well and we can use Oracle with out SQL Server databases but I don’t think that will REALLY work, but the other stuff like components is worth it’
(People love to say stuff above which makes no sense at all. That person was likely not a developer but an analyst)..
This is what I hear perhaps the most:
‘Nobody here cares about fancy stuff like this. I am a REAL WORLD coder and I say ‘shut up and code’. All this is is BS so I cannot wait to go back to my cube and do REAL work. I have bugs to fix. This is a waste of my time as I can also code better then any tool can’.
at this point I am thinking once again why do I do this….
What do I WANT to hear? Frankly it’s irrelevant at first as they pay me to get them there and indeed I do love teaching as if just one person out of 30 gets it that is enough to make me very happy.
It’s worth the risk.
Here is a much better then expected recent style response which is as good as I usually can expect:
This could help in our main barrier between the thinking of requirements people and us. They are idiots with technology and make our lives miserable. I am not sure we will get any win by being closer as we already hate each other. So the positive of NHibernate might be bad. If it DOES make us work with them more to code, ugh.. Not sure now…
Well let me speak to code. That’s easier…So the use case is a proof on that. In our work we have no objects really other then utility type ones or pure objects with better names for tables. Nobody tries to fit things into one model so a lot of things are out there. Most code is in ASP.NET pages or Forms so we cannot get to it but it is crap code anyway. When I look at it they use the m_ prefix and I hate that. I won’t look at that even though they say there are interface driven components I could use. Who cares..
We already have a new project in production without NHIbernate or any central objects and I am leading the next version release. I am hoping using the following contract/signatures at the core will work but no idea about how SQL works in this world.
Let me show you and then ask the question:
public abstract class MarketOffering {
//lots of complexity but good Single Responsibility and
// hierarchical breakdown
// think entries into suppliers, distribs, variant SKU, etc.
}
public class Widget : MarketOffering {
// Kind of suprising small to us and there was not as much
// different as we thoght. We could be wrong.
}
public class ServicePlan : MarketOffering {
// Same…
}
So I want NHibernate to eliminate the crap of the database and make it not as hard for all these rules,, conditions, stages, events, etc. that are so hard to work out.
I want to forget about the fact that there are 5 tables involved for all the data we need and we deal with nasty composite candidate keys we must use to join on and I have to know a type code to even start building a SQL Query
We have:
SQL SERVER – tbl_prt_usActive_REVENUE_ITEM – 80 columns
ORACLE – tbl_prt_globalREVENUE_ITEM2 – 92 columns
We sometime union as one item they share is really only in the other table, and it’s so so bad.
Just today I needed to get all the salable items (that our marketing guys tagged as ‘silver’ whatever that is and also were making at least a certain margin of profit. To get that is a call to an accounting system via web services.
THEN they said they only cared about the ones under some legal constraint about sale to certain countries is not allowed.
I’d write up something on the board like:
from item in Repository.MarketOffering
where
item.IsMarginMet(Target.SilverTagged)
&& HasRegualtion(Constraint(AgeLimitTobacco))
select item
Then the ‘real’ developers would speak to how that would never work, and this that and the other…
Technology is not the barrier. This is where we are. The demands for fluent interfaces are done via refactoring to a tight entity model the interface API supports.
So then the easy part of teaching… I can tell in 10 minutes if it will work as all they need to do is be motivated enough. I’ve never seen failure due to real technology limitations…
So you can see why your mind and your competence was very fun to stumble upon and why your writings are so off the chart top .001%.
One question: Would you consider a kind of ‘guest article’ for us? You can run it where you want but we would drive you a lot of traffic I hope and we have a need for more content that is very specialize as a new project is starting and I hope it’s a win/win.
Let me know if possible..
Thanks,
Damon Wilder Carr
Sorry I meant to write (I had another idea in my mind):
public abstract class MarketOffering : IConstrainable {}
from item in MarketOffering.Repository
where
item.
IsDescribedBy([] {Status.MarginGreen(ActiveNow),
Goal.SilverTagged.Achieved,
Constraint.UsFederal.NoSellNations})
select item
My point here was this:
The job we do is very specific.
1) End state is a domain specific language.
2) Linq is so fundamental to make that possible/reasonable in 3.0
3) I believe the bar is set at implemention being:
a) ORM is assumed
b) Domain Concepts Fleshed Out
c) Code is Linq (to whatever is required) and custom provider(s) for the domain
d) A fluent interface style is used as the fundamental DSL
Sure we could do much more but I believe the above is enough. A full graphical DSL or external DSL is just not reasonable at this point in time.
Damon
I big influence for me was Applying Domain-Driven Design and Patterns: With Examples in C# and .NET by By Jimmy Nilsson. ()
I highly recommend it.
My current project is an intranet application for 15-20 users. So it’s rather small, but they have a ton of business logic. I work with a dba, he handles the data modelling. Some of our high performance processes still use stored procs (about 5 of these), the rest of it we use NHibernate.
Performance is fine, I find it easier to maintain, and I’ll be the one maintaining it – the dba will probably move on. Performance isn’t my first priority, maintainability is.
I’ve seen organizations with a tremendous amount of crazy stored proc code implementing business logic in the database. I don’t believe in that. I think that is what code is for. It makes more sense to me to express business logic in code than in TSQL.
Lastly, I see much of the database as a persistence medium.
Its important to pick the right technology for the job, not just pick the technology ‘because’.
Regardless it’s easy to write bad code 🙂
Hi Steve,
I stumbled upon your blog from. The comment you left about using Automapper to map between the nhibernate entities and the DTO’s that are actually sent across the wire to the silverlight client via .NET RIA is exactly what I’m looking for! (Assuming of course, that I got that part right)
You said you have some example projects that show how you use nhibernate and .NET RIA but I couldn’t find anything. Could you elaborate a bit on what your general strategy was?
I’m a bit new to the “enterprise” patters like DDD so I’m not even sure that’s what I WANT to do. In fact, one of your posts discussing NCommon talks how exposing the DAL layer directly is suddenly a GOOD thing? Seems a lot of patterns and ideas lately contradict each other.
If you could shed some light on these issues, it would be greatly appreciated!
P.S. you have some great blog entries, really got me thinking!
It’s a complicated realm of information really. I don’t think NCommon is necessarily exposing the DAL layer. The actual CRUD is behind the DAL. The specific domain/service fetching strategies and specifications are best created in the service layer. There are levels of extremes, different camps of thought. However, the layered approach – a domain layer with services for your application is vital. The repository is to keep the domain objects poco. Free from knowing about how they are synchronized with the database.
One of the critical pieces to me is understanding the unit of work. ie. the lifetime of your nhibernate session and how that relates to your architecture.
In Silverlight, I’d go with a viewmodel on the client. RIA.net provides a service layer to interact between the client and the domain. It provides a set of proxies on the client to interact with the services on the server to help make the interaction more encapsulated. The services can provide a mapping layer to interact with the domain layer back and forth to the viewmodel. RIA has some added benefit of a unit of work on the client side as well.
That is highly simplified overview. Martin Fowler, imo, really lays out the high level view. Services, DTO’s, Domain, Mapping, Unit of work, etc… Tools like NHibernate provide a start into building these patterns. I think it’s a gradual learning, as Eric Evans (DDD) I think would suggest, you’ll probably not get it right the first time 🙂
However, let me say, that, in my experiences, not following the patterns lead to code that is hard to maintain, hard to build and hard to understand. By properly layering your code into a structure, that, imo DDD promotes, you’ll find the code is easier to change and maintain/grow.
If there is a specific example or question I can create a blog post.
Well, steve, I was looking over some of your software articles and came across your anit-obama rant…..
ACORN, Sub-Prime lending….All Obama’s fault….
I suppose you think we are much better off with W, Trump, Palin, Beck or that fat slob Limbaugh running this country as opposed to someone like Barack Obama who actually cares about the middle class, actually cares that young children are entitled to health care, who actually cares that the infrastructure in this country is crumbling, while conservatives like yourself only care about your taxes….
I think Steve == null, I think Steve < null, I think Steve's Mind == null…..
Interesting response. Very antagonistic and stereotypical response I should say. I’m conservative, I don’t know how that has anything to do with your comments, I would say I’m less inclined to be liberal in my views, mostly around morals and right living. My post was factual in nature, not some sort of propaganda.
I’m not for anything ‘big’ – so I’m really against big government, and also big corporations – they are both greedy. The health care bills were about Obama’s ‘legacy’ – just turn on CNN or whatever, and you’d quickly be reading about how this is about his ‘legacy’. Well, I don’t really care about his ‘legacy’ – I care about a health care system that isn’t going to put our nation into a terrible debt crisis. There is no silver bullet for this stuff.
I’m not attacking his character (like you have attacked these right-wing’s character), but I believe Obama didn’t listen to the American people on this topic – and that is what concerns me.
Let’s face it, this country is in need of some serious leadership, I don’t see it coming from either party, we need to get rid of putting lawyers into office and get people in there that care about our country and won’t put us into debt. Call me names all day, but I don’t really buy into this idea that it’s a good thing to be trillion’s and trillion’s of dollars in debt, regardless of what party runs our country.