
It's a shame this dude was running late for the presentation.
at least I assume he was, he's got his electric shaver with him.
Windows developers have suffered multiple changes of direction in recent years. There is Win32, WPF (Windows Presentation Foundation), Silverlight, and now WinRT (Windows Runtime), the platform formerly known as Metro. Can they be confident in the longevity of the new thing, or might it be swept away in favour of some other new …
Are variadic templates "critical" other than for producing even more unreadable and unintelligable code than can be managed by normal templates? I avoid templates like the plague unless there's a really good reason or I have to use them ( eg STL). Seems to me C++ is just turning into a language geeks wish list rather than a clear and sensibly designed programming language for developers who simply use it as a means to an end. (And yes, I am a C++ developer).
Variadic templates simplify things like std::tuple and std::function and forwarding functions (think of things like std::bind1st, std::bind2nd and boost::bind). The way Boost and VC2012 implement them is to explicitly generate N versions of those classes/functions (1 template arg, 2, ..., N). For example:
template<typename T1> struct tuple;
template<typename T1, typename T2> struct tuple;
template<typename T1, typename T2, ..., typename Tn> struct tuple;
With variadic templates, this simplifies to:
template<typename T1...> struct tuple;
This is not only less code (easier to maintain), but the compiler performance is orders of magnitude better at compiling them (memory and speed). The gcc version goes from exponential time with the number of template parameters to a second. [See http://www.generic-programming.org/~dgregor/cpp/variadic-templates.html].
If you still want to learn programming, start with the right language. These days I'd suggest Python. Anyway, definitely a scripting language (interpreted), so you can type bits of code at the computer and immediately see what they do. As a side-bonus, you won't need to pay a penny for a compiler or a developer environment (even if you are determined to stick with Windows).
If you get to the point where you are a competent programmer and are being frustrated by the slowness of code written in your script language of choice, you might then consider learning a compiled language. (But do first make sure someone hasn't already written what you need!)
"think of things like std::bind1st, std::bind2nd and boost::bind"
I'd rather not thanks, I've just had lunch. C++ was supposed to make programming easier compared to C. Its actually done the opposite by creating a syntax so vast and obtuse with some much potential for implicit code execution, its close to vying with Perl as a write only language. Thats a big fail IMO, however I don't expect many people to share it.
It's not that bad, You don't have to rushing to write the cleverest template code you can.
Write simple code and C++ is a lovely language to work in provided you follow the rule.
Finally you have both typedef and a macro pre-processor, you really don't have any excuse for code that's hard to read.
Boost and the STL contain some very clever code (a bit hard to read, I grant you) but there are quite a few open source frameworks which are rather easy on the eye, try looking at http://www.webtoolkit.eu/wt for an example of clean easy readable C++ write on top of Boost no less.
Good you asked.
Yes, variadic templates (and templates in general) are important. Rember "printf"? Remember what happens when you use wrong type in format string? Templates in general help to avoid these problems. Since you do *use* templates (in standard containers) you probably did notice that they are not actually difficult to use. They are sometimes difficult to write, but that is slightly different from *using* them (slightly, because in both cases you have to learn to understand compiler errors thrown at you).
Back to "printf" - variadic templates enable someone (not necessarily you) to write a function taking unbound number of parameters (like printf does) and process these parameters during compilation time, thus enabling type safety (which variadic macros do not provide). In practice this means allowing one to write functions with interface similar to "printf", where compiler actually knows types of all parameters supplied when you call it. You don't have to write such a function - but as explained above, writing is not the same as using.
And frankly, if you are too dumb to learn how to use templates (or exceptions, destructors etc.), perhaps C++ isn't for you. There is plenty of less demanging languages to choose from.
Can anyone strip all the marketing jargon and handwaving out of that and work out what, if anything, he's actually saying? There seems to be a lot of vague promises and assurances, but that's about all.
Microsoft have a history of messing about with programming interfaces - look at all the different database access methods they went through.
Here's my take on what was said - Microsoft is committed to all the technologies in Win8 for the life of Win8. i.e they make no promises they will survive in Win9.
In fairness though, while Microsoft may have went through many database access methods (to use your example), all of them continue to work in Win7.
Reading carefully, and passing the text through my special MS manadjmuntspeak tranzlator, it looks to me like he said 'MS is totally TeH Win. I love you. Apart from that, whatevs babe.'
Anyone who thinks Win RT is going to be any kind of standard should be sentenced to a lashing by the Cat o' Nine iOS Fails.
Another bunch of marketing bla bla from Soma.
The messaging hasn't been very good, when they first announced WinRT, it sounded like .Net was dead.
They talk up Xaml a lot, but it seems like each platform has a distinct and not very compatible version. Silverlight is a lot like WPF, but its different enough to be a real pain.
Microsoft has its faults, for certain, but there are a lot of us totally reliant on the MS legacy for our livelihoods. I looked into linux as an alternative a long while ago, and to be honest the opportunities for earning money just couldn't match up, and they still don't (unless you're really at the top of your game - and by definition not everybody can be!).
Funny you should say that... I look at my income over the 2011—2012 financial year... and maybe 1% of my earnings had anything to do with Windows.
Namely, fixing up a problem with a web page that wasn't loading right in IE8. (the web application is the front-end of an energy management system.) Everything else for me revolved around Linux.
gotta laugh.
basically Windows said "jump" and the Visual Studio team said "how high"
after a brief rebellion where they tried to create .Net, WPF and Silverlight as attempts to stay relevant the Windows team has reminded them that developers hate this "new shiny objet" churn and put them back to writing tools for languages that work and have a future.
an example... while Microsoft thrashed about taking Classic ASP and bolting on about 4 releases of .Net to make it monolithic and complex PHP and Python continued to evolve as small agile solutions... the impact seems to be that IIS and .Net lost the traction asp had got as developers voted with their IDEs. Android, iOS, OSX ... they all have one predominant way of doing things and you know it's got a decade or more of life... on Windows (x86, RT or Phone) you're lucky if the landscape stays recognizable for 18 months.
Honestly, does anyone actually care that the new interface is no longer called "Metro"? Yes they had to change it for legal reasons and of course they don't really want to admit that, but does it actually matter? I for one couldn't really care less what they call it.
Don't really care what they call it, as long as they call it *something*. At the moment, they haven't got a name for it, just a bunch of descriptions. "Modern apps", "Windows 8 apps", "Windows store apps", etc. Those aren't names. Call it "Squareo" or "Touchblox" or whatever you like, we'll get used to it as long as they don't keep changing it.
I saw the writing on the wall a long time ago, when MS ditched OS/2 APIs (pretty nice for their time) in favor of Win32 (pretty awful any time). The change was just so radical, and broke so much of our code more or less permanently, I determined that they either did not understand what was under all that or they had some strategic reason for creating the havoc. To be honest, even though I keep a tin-foil hat near me at all times, I am still not sure if we are facing incompetence, malice or some combination.
What I advised back then, have continued to advise and essentially advise now is to abstract your own core business function so it does not care about the underlying APIs or metal and spend as little as possible on that. Concentrate instead on *data*, which, despite decades of thrashing about is still a very weak point in the entirety of the fortune 500 and government.
As part of the data piece, I have, since the early 1990s advised to pay special attention to security. In my opinion, it is essentially impossible to secure most of the perimeter and hence it makes good sense to concentrate on 'core' stuff and protect that by having huge redundancy, integrity checks, and at all times 'proximal' (a few simple transforms away) human-readable representations. Humans can still spot 'blemishes' and tampering much better than any machine. Let the machine do exhaustive comparisons, but let people examine 'canvases' of data to spot problematic anomalies.
Although I have kept abreast of things I have only coded against stuff like .NET or SOAP when specified by third parties and otherwise done vanilla code against thin abstraction layers using largely immutable stuff like ANSI-C. I have, admittedly, had more latitude than most, but nearly every working programmer has been presented (numerous times) with embracing the flavor of the week/month/year or taking a more conservative line. The conservative ones, in my opinion, have won hands down. If you are a programmer and you look under the covers you will see a *ton* of C/C++ code between whatever you are working with and the metal. It is not because other ways have not been tried. They have been tried and they have ultimately failed.
At some level, you are obliged to embrace some third-party abstractions and protocols. Here, FWIW are some of the ones I have embraced:
Ethernet
TCP/IP
HTTP(S)/(S)FTP and similar long lived protocols
ANSI-C
ANSI-SQL
[Binding SQL programmatically is an ongoing problem. I reluctantly use vendor stuff (MS, Oracle, etc) or other language bindings]
Base64
.gz, .tar, .zip
SAMBA & Co.
Will MS change this again? Bet on it. I am.
There may be a number of different tools, but thats becuase there are a number of different jobs (and some of the tools are older than others)
- Win32 / GDI is the original API that has been around since the dawn of Windows. Its stable, reliable, its here to stay until the end of time (for backwards compatability reasons) and its also a pain in the ass to use because the API was designed before OOP became prominant (and also for backwards compatability reasons)
- Windows Forms is essentially just a wrapper around the WIn32 API / GDI. Its stable, reliable, infinitely easier to use than the Win32 API, and again here to stay until the end of time.
- WPF is for developers creating "rich" (i.e. flashy) user interfaces for desktop PCs. Windows forms is still built on top of GDI, a system originally designed at the time of 16-bit operating systems and so its not really geared around flashy interfaces. WPF aimed to make things easier by starting from the groud up with a new layout engine. Its future may not be as assured as Win32 or Windows Forms, but I'd say that its still a fairly safe bet that WPF will be around for a while.
- Silverlight is a WEB technology, don't confuse Silverlight with WPF just because it uses XAML. There probably could have been more consistency with WPF, however in a lot of places the inconsistency is there because its a WEB technology and just can't do everything WPF can (e.g. for security reasons).
- WinRT is a technology for building mobile (i.e. phone and tablet applications). Like Silverlight, don't confuse WinRT with WPF & the .Net framework just because it uses XAML, and again like Silverlight its inconsistent in places because you can't do everything that you can do on a desktop on a tablet. You woulnd't choose WinRT to build desktop applications, you choose WinRT to build mobile applications - the fact that they work on desktop PCs too is just a bonus.
Maybe they could have been more consistent in places, but I don't really see the "change in direction" - Each of these technologies has its purpose (even if that purpose is allowing me to keep developing my legacy applications).
In fact Microsoft are being pretty consistent with their use of existing languages (C#, XAML, HTML, JavaScript) even on new platforms. The only popular development environment I'm aware of which is more consistent across platforms is Java, and developing in Java is a pain in the ass.
With Windows 9 Microsoft will enable “Modern UI” to be Windowed, re-sized and docked on a desktop computers and big-screen panels. The task-bar will be replaced with a Start bar that are active tiles instead of icons.. many will call it a return to Win7, but MS will describe it as WinPhone experience for large displays, and those without MS keyboards (that replace function-keys with a touch panel). There will be no return to the “start” button, but there will be a “Home” app that is more like a WinRT version of Win3 Program-Manager intended as a launch-pad for Windows-Store-Azure-Apps. Windowed WinRT apps will look pretty indistinguishable to WPF apps (which will gain traction after Microsoft open-sources .NET).
We’d wonder what all the fuss was about, but will be told it was all needed because the Windows-8 touch interface didn’t fit with Windows-9’s gesture interface & kinetic keyboards.
As for programming… even MFC will still be supported!
“But go back to Windows 32. That’s a platform that came out 15 or 20 years ago. That platform has stood the test of time. Take .NET for example. That has stood the test of time. Take WPF [Windows Presentation Foundation] for example. We absolutely continue to support WPF for desktop applications. Visual Studio uses WPF for its own application, because it makes sense in that scenario."
He missed out Win64. This is sufficiently different from Win32 that most apps for the latter platform have not yet been ported. Perhaps he's drunk too much cool-aid and doesn't know this.
Win32 is indeed still here, unless you are talking about their 64-bit Server platform, in which case it is an option. MS would rather you targetted Win64.
.NET is not. (It's absence is the main reason why Win8 manages a smaller footprint than Win7.) It is true that there's some logic to automatically download it from the web if you try to install a .NET application, but the writing on the wall is clear -- MS would rather you didn't use this anymore. There was also (at least during the beta program) a nice bug whereby it would download the wrong language if you (say) bought a machine with US English pre-installed but immediately changed it to your local tongue. Apparently this was by design.
Visual Studio uses just about everything (not just WPF) because it needs to let you develop for just about everything. Apart from the demo-ware aspect, you can't write a decent IDE without incorporating a little bit of "invasive" code to let you debug a given target. If he can't find a better example than VS then we can assume that WPF is moribund.
.NET is not. (It's absence is the main reason why Win8 manages a smaller footprint than Win7.)
Uh, what? Yes it is. .NET4 is installed by default, .NET3.5 (which is cumulative and contains .NET1, .NET1.1, .NET2.0, .NET3.0 and .NET3.5 itself) is an option install, like IIS.
Where is all this ".NET IS DED O NOEZ WE IZ ALL DUMED" bullshit coming from? It can't be from .NET developers, who already know better.
So what's the source? Ignorant people with big mouths or deliberate FUD? Gotta be one or the other.
Oh, and @Ken Hagen -
WPF is a Presentation Framework (hence the name). It can't do anything except draw shit on the screen (along with some stuff like bidirectional binding, which is nifty but exists for the purposes of, er, drawing shit on the screen).
Nobody with any clue as to what they were talking would claim that VS2012 is written wholly in WPF because that would be impossible. Thus, I find your attack on the speaker either a) ignorant or b)... disingenuous.
I'm reading:
"Er... it looks like we haven't put a lot of thought into this, and that we're making a huge balls up, but that's far from the truth. There's... a plan... to this... of sorts."
Metro's TMed, so all change, after a year or so of chanting Metro.
.Net support thrown in after JS/HTML5 and C++ makes .Net devs have kittens.
XNA kinda supported, ish. Just like Silverlight. Well... less ish... that one's dying.
Clearly the in-fighting at MS between high-level officials, and fear that they were falling behind in key markets (smart phone and tablet) has lead to, what can only politely be referred to, as a gigantic cluster fuck.
Various people have gone to Ballmer saying "I have the silver bullet, this will sort things out", and he's loaded all of them into a gun, and is now wildly firing into the air.
And they're all flying off in random, totally pointless directions. Much like where they seem to be sending us developers.
Of course it is marketing blather. Microsoft reinvents their developer paradigms continuously, and it isn't just some random mistake. There's plenty of money to been made every time they do it, from the Microsoft Certifications to the books to the new licensing deals for third party tool makers. Leading us all around by the nose is a big part of their business plan, of course they have a new paradigm for developers.
Which is to say, that msvcrt is the new system API. This is good news for open source projects targeting Windows -- they always use MSVC as the compiler, and they never have any idea about the Windows OS API, because they come from an environment where the OS API is, by tradition and definition, the C api.
Like so many corporate drones, Microsofties use language in a way that defies logic. Here they are trying to change history. It makes you wonder how any of them can write code that actually does what it says and isn't full of waffle and bloat.
They had to change the name Metro -- NOT we only had Metro as a working title and now we've settled on the final name.
I may be wrong but I don't see it as either or arguments between various flavours of design environments and coding languages.
My simplistic view runs along lines of:
Apple - controls/releases hardware and so has a tighter development framework and environment and strategically aims to make iOS stuff easy to do and pretty secure.
MS - broad hardware support with variance across mains operated devices and various portable/battery operated items with a variety of power requirements so has to use a wider ranging software development solution (just look at the trouble websites have to display similarly across several browsers.
Google - can't make its mind up yet. Will it be modelled more of Apple lines or MS lines? Or will it have to flexibly pick up changes where those just happen to be successful and grab public eye/purse/wallet and attention?
Varied, loosely controlled hardware making for varied, loosely controlled design environments?
Unless it drops like a stone, in which case we'll drop it like a stone.
Look at what MS uses to develop its *key* products in.
They will no doubt supply nearly *any* language if they see there's enough market.
But seriously support it?
Put it on a level playing field with their internal API's?
Mine will have the dead tree copy of "Barbarians lead by Bill Gates." Well worth reading.
“We’ve had a fair amount of churn in our platforms,” he acknowledged.
-but yet you still ADD to the confusing by releasing yet another platform.
“The goal is definitely to have more consistency,” says Somasegar.
- As clint would say: "Goals are like assholes, everybody at Microsoft is one!"
"I asked Somasegar to clarify the naming around the platform formerly known as Metro. He did, up to a point."
- Are you sure this guy is actually working at Microsoft? Because he knows as much as anyone else in the street. I guess they picked him out some bar downtown.
"The commercial name for apps is Windows Store apps."
- It seems the only thing they do at microsoft lately. Naming and re-naming stuff.
“It’s really a bingo card,” he said.
- WTF. So developers have to earn money by playing bingo!? Why don't I just go to the pub, have a couple of pints and play darts then?
“The goal is to make it fair and open for everybody...
- Oh Dear, another one of this bozos 'goals'. Isn't the frecking soccer match over yet? And when did Microsoft ever care about "fair and open for everybody"?
And then ex-microsoft employees get involved in other companies and they fuck things up beyond belief. No wonder! Does this guy even know how to wipe his ass? Oh wait, He'll use a bingo card for that.... >:->