Where I think this would be useful is as a feature in an existing language.
For example, if you could create a certain type with a certain state. That way, if you have that special type you also know it has a certain state, or a certain value. The equivalent (somewhat) of saying what Erik said in his video of you know you're going
to get a certain type and a certain value, but really I mean state.
This would be beneficial in the case of a string for example. Let's say you create a new stringempty type, where whenever you get this value you back you know it will never be nothing.
Why would this matter?
It would eliminate all of the exceptions for people who don't check if string is nothing before trying to call the Trim() method on it for example.
Imagine how many exceptions this would elimnate and how many lines of code it would eliminate.
The bottom line is I don't care if a string is nothing, I just want to get the value, trim it, and see if it's equal or not equal to a certain value.
If in order to be truly "pure", why don't we just replace our code with nothing but a bunch of constants?
We could then go around saying I write constants instead of I write code.
I don't understand the thinking that in order to be truly pure, it has to return the same value. Why can't it be pure if it returns the data type specified? I.e., if I say I'm goign to pass you back a string, then you can know for a fact you are going
to get a string returned.
Why do we care what the actual value is?
Why would it make sense to have to specify not only the data type returned, but also that it's not a constant value by plaing <IO> in front of it?
Also, what's up with the Let? Why can't we just say x = "whatever"
I think it would be better if you show a sample application, where this type of functional programming language shines.
When we don't want our "world" to change, why doesn't it make more sense to use the concept of Interfaces when needed?
I think the problem with the concept of purity and functional programming, is that it's trying to force programmers into a box of how mathmeticians think. That logic falls apart because the need for a programming language is not simply to solve mathmetical
To step back and keep it simple, rather than talking about how it works;
What problems does it solve?
How does it make programming or the end-result better?
I think it would be better if you do the demo first, and then they talk about the demo. That way, you have a visual in your head of what they are referring to, and can understand whatever they are referring to better. Where, if you talk about it and then
do a demo, you have to try to think of what they are talking about first, and then backtrack once you do the demo and relate the demo back to what they said before.
Anyway, just a suggestion. Keep up the great videos.
I never understood the entity framework, but now I do. It seems very interesting.
Currently, I have a data access class I wrote called "StoredProcedure". I then have code generators to create the stored procedures, and the VB.NET classes. It's specific to the type of operation, such as insert, update, delete, select as output params, select
Although I think it's very clean, replacing all of that with the entity framework, if it's clean and is performant, would be great.
However, the stored procedure class I created offers quite a bit and has some intelligence in it. For example, formating the sproc name, validation, not adding certain parameters if they don't pass validation and that parameter has a default, etc.
Also, I plan on adding possibly some type of load balancing to it, possibly based on the stored procedure name (or parameter specifiying read only or data is modified by this sproc), and also user based specific connection strings. (This way, for example,
you can setup mirroing database, and have the read-only stored procedures executed on the mirrored database.)
I'd be curious to see if the entity framework would be able to do this as well, and\or whether or not you can inherit and modify certain objects that are responsible for this.
In terms of software composability, I would say, it's more about the programmer writing good code, rather than a new programming language.
I think the two most important aspects of writing good composable software is A) interfaces and B) reflection.
That's all you need. Then, in your house example at the end, if you have a component that implements an interface, all you have to do is rewrite it or write something completely new and call the new component instead of the old one, or use a factory pattern.
I actually wrote our own EDI system in 2 months, plus an integration going on at the same time with a trading partner. It's only been used for the transportation industry so far, but it's processed at least a couple hundred thousand messages. The 2
month system was a rewrite of the first time I wrote the EDI system. The first EDI system I wrote when I was brand new to EDI had an XML system that would map the EDI to a table, and do an insert or update on a table. It started getting to complex to support
every scenario in XML, so I rewrote and the second version is a lot better.
Of course it can't compare with a system like BizTalk, but it's not bad for a pure EDI system. So there isn't a tight coupling it will use reflection, and load an assembly dynamically and call it to actually do the processing on EDI message. However, there
are objects that the external dll's use to read/create the EDI file itself, for example, to read or create an EDI "compatible" date\time value. It doesn't have a full GUI, and everything else, like deep validation of every type of transaction set and every
segment/offset when creating the 997 response. The last I checked into BizTalk, the deal killer was having to purchase a license for each individual company or server.
This is really good but is it available yet on the palm treo 700w? In the video I think he mentioned this video is going to be released after it's available.
I'm surprised to hear anyone likes the tmobile dash over the treo.
Also, it would be nice to have some basic features fixed/added like adding a phone number that just called you to your contacts without having to memorize it, better call conferencing (my little crappy nokia was a million times better than the conferencing
on the 700w), keeping an e-mail marked as read when I then move it to another folder (when viewed in outlook on my desktop it's unread but in the folder), etc.
Hopefully you guys start doing more smaller incremental improvements instead of always big picture let's change the world type stuff.