Question for the original poster: Are you referring to getting your software in line with 21CFR Part 11 regulations? I don't see how switching languages is going to help you validate your software any quicker.
If you do move to Java, though, everything I've read indicates that implementing automated unit tests in JUnit would be a very, very good idea. That way, your unit tests can serve as documentation that certain aspects of the system are validated without making a poor human run those tests.
One of the most important (and different) concepts behind Rails is that application frameworks (APIs) should come from exising applications. The dudes at 37 Signals created a framework for their one application, and that framework was so well-designed that it could be used for any general purpose greenfield (i.e. completely new development) web/DB application.
You just need to add more browserCaps settings to your machine.config or web.config files to get better output on Firefox, Opera, Safari, etc. You can find them here: http://slingfive.com/pages/code/browserCaps/
You can set your target HTML schema (HTML 4.0, XHTML 1.0, strict, transitional, whatever) as well, but exactly where escapes me at the moment. It's a project-wide setting somewhere.
Forgive me for asking the obvious, but why is this important? What would be good reasons for using what's effectively C++.NET when there are 2 other language choices for.NET (C#, VB.NET) that are much better-suited to writing.NET applications?
I thought it kind of was understood that if performance was a priority, you shouldn't be writing for a Microsoft platform in the first place except for a front end, let alone with a framework as performance-shitty (although much more fun to code in) as.NET.
I mean, I'm sure there are good reasons to use C++/CLI or whatever it's going to be called, but could someone explain them to me?
While I don't disagree with your post, I think you have the meaning of refactoring confused. Refactoring implies rewriting a single block of code to make the code run faster or more readable while not changing the functionality of that block of code. Rewtiting an entire application from scratch doesn't really qualify as refactoring, since in doing so you would have to change the functionality (moving from error codes to exceptions, per se).
This is an absolutely ridiculous statement. You think that in 5 years Python, Ruby, and Perl, primarily Linux-based languages with no underlying framework (like the.NET framework/Mono and J2EE) are going to be the majority of new development? Maybe on *nix environments, but Windows is far more widely used on client machines. That's not going to change in the next 5 years unless Linux takes a major change of direction towards a unified object model, which is frankly contrary to the entire Linux philosophy.
Keep in mind that I'm not trying to disparage the languages. I would actually recommend the kid learn them instead of Java or C# because the languages you listed are much more different from C++ than Java or C# and will give him a much different perspective on how to solve problems. There's not really that much to learn with C# from C++ in terms of the language. The syntax is mostly trivial. The thing that would be valuable to employers would be learning the object framework, either.NET/mono or J2EE.
It's not necessarily that.NET is better than Java, although the architecture seems much simpler than J2EE. It's that.NET is WAAAAAAAAAAAAAAAAAAAAAAAAY better than COM/VB6/Classic ASP/Win32.
I think you meant was "C# is to.NET what Java is to J2EE". C# and Java are languages..NET and J2EE are platforms, although there are multiple.NET languages (even an implementation of Perl.NET, I believe), to the best of my knowledge, there's only 1 J2EE language: Java.
That does not necessarily make.NET better, because VB.NET was only created to get stodgy VB programmers to switch away from COM and to the.NET platform. The more I develop in.NET, the more I realize that in the 2003 version, VB.NET is really a second-class citizen to C#. (These issues have mostly been fixed in 2005.)
I think the more important question is "Who gives a crap how your braces are structured?" I mean, seriously... it's so far down on the list of priorities in terms of making code readable that it really should be left to the personal preference of the developer. If you're writing new code, use your own brace style. If you're editing existing code, use the original author's brace style.
There. Problem solved.
And if carriage returns and tabs vs. spaces are really affecting the readability of your code, you're either developing on a really old platform (I think the AS/whatever C compiler couldn't deal with tabs or something.) or you need to get a better development environment. I use VS myself, but I would imagine that Eclipse doesn't have issues handling carriage returns and spaces/tabs.
Microsoft's old API (Win32) is so hideous because they believed (correctly from an economic point of view) that backwards compatibility for users was more important than making an API that developers liked. Raymond Chen, one of the head guys involved with designing Win32, basically went with the idea that if any application that worked in Win 3.11/DOS did not work in Win32, then they would not upgrade.
However, their current API is.NET, which I think most would agree is quite elegantly designed, regardless of your political feelings towards the company that designed it. Win32 is pretty much dead as far as MSFT putting any more effort into it.
Longhorn's API, WinFX, encapsulates the.NET Framework and is likewise (at first glace, anyway) fairly elegantly designed.
Actually, according to one of the latter chapters of Code Complete by Steve McConnell, engineers are actually quite good at estimation, at least at first. It's when management attempts to pressure engineers into shortening their estimates that problems occur.
I agree with the previous poster that MFC and HTML are not particularly related. Either the submitter made a mistake in naming his technologies or a troll question got posted or something.
However, let's assume that the story is true. Let's make another assumption that the problem the submitter's friends is not that management is taking what the developers feel to be their IP, but that management is trying to release something cross-company that isn't remotely ready for prime time.
This seems to go against the general trend of suggested lies and deceit that I've seen in the comments on this article so far, but here's what I would suggest:
Just be open with the business people - explain what you see as the consequences of them releasing this software with the current schedule, but stick to the facts and stay away from emotional or personal characterizations, like thinking about people as PHB's. Explain that the software is not documented or tested, and if they release unfinished software, it will probably be unreliable. Explain that the more critical the software is to the business, the more rigorously it has to be tested and documented. Explain that if they want to put this into production, they should have an experienced developer and/or project manager work out what needs to be done to get the software finished, and product a project plan, documentation, and most importantly, a test plan.
But also explain that you understand there are business considerations external to the technical side and that you feel your role is to explain to non-technical people the technical impact of their options.
It has nothing to do with programmers being lazy. I'd much rather work smarter using higher-level tools and get a lot more done. It has everything to do with this simple fact, which wasn't (as) true back in the old days:
Hardware is cheap. People are expensive.
Think about it. A desktop with current hardware costs under $1000 these days. Lower-end servers run about the same amount. Compare that to how much you cost your employer per hour. How does it make economic sense to (most - don't you embedded and low-power computing people get all up in my grill) optimize software at the low level you're suggesting? Most software for the end user spends most of its time waiting for user input or doing network operations, not reversing strings.
If you want to optimize something, optimize the architecture. Pool database connections, reduce network traffic, change object relationships to make them more efficient, but for god's sake don't waste your time reinventing low-level functions that have been done written and more importantly, DEBUGGED to the nth degree.
I strongly disagree that we should be encouraging people to think about optimizing the optimizied wheel. Spend your time thinking about bigger and better software problems.
You are completely offtopic (as am I in responding), but you're also incorrect. VB.NET (.NET framework 1.x) is VB7, just as.NET Framework 2.x is VB8. It's even referred to that way in MSDN white papers. However, you are correct in your observations about MSFT breaking backwards compatibility in VB.NET and the crappyness of the converter. While the version is labelled 7, it might as well be a whole new language.
It's bad practice to reuse the variable. (I'm sure many books have reiterated this, but Code Complete by Steve McConnell comes to mind as a place where I definitely remember reading this.) Performance-wise, it will not make any significant difference, but in terms of readability and correctness, if those loops are 40 lines apart, you're going to have a tougher time debugging and a much greater risk of making a logical error. The best practice is to declare a variable right before it's used, and to use it once and only once.
I have the print edition. There's an intro by Joel for each essay of about 1 page. The book itself isn't that big... I read it in a few days. It is, however, an awesome book, and I would recommend it unconditionally to just about anyone who's interested in software engineering.
That's a rather fatalistic thing to say. Not all developers make lousy UI designers... I think it depends on what kind of developers we're talking about.
If we're talking about (an admittedly stereotyped and over-simplified) *nix developer who writes code that's only used by other developers and thinks of the command line as the ideal tool to get things done, or the idiots who designed the GIMP UI... s/he's probably not a good UI designer.
However, there are plenty of developers who write code that users interface with more or less directly who have very good UI design skills.
I don't even think that's what MSFT is releasing, although I did not RTFA very closely because I didn't see much content - mostly marketing babble. I think they're talking about graphic designers who make the actual pixels on the widgets.
BTW, If you're a developer, and you think all developers have crappy UI skills, you'd probably do best to read a book or two. I recommend Joel Spolsky's (of Joel on Software) "UI Design for Programmers."
Yeah, but you have that problem with all of the ORM libraries I've looked at. Hibernate/NHibernate has the same problem - it uses its proprietary HQL. At least it provides you a layer of abstraction so you're not completely locked into a database vendor, although I can't think of an example where different vendors implement basic statements like INSERT, UPDATE, and SELECT differently...
You seem like you really know both platforms well. I'm currently a VS.NET devotee, but I want to learn more about Eclipse and what the names of the plug-ins I'm looking for. Would you mind answering a few questions:
1. Can I do visual design of OS-native UI elements like I can in VS.NET? e.g. Can I drag a combobox (or whatever it's called in Java) onto a form and resize it using the mouse? If so, what plug-in(s) do I need to do it?
2. Is there a source-control system with file locking capability that integrates nicely with the IDE? Even though I agree with most people that SourceSafe 6 sucks, I do like the fact that VS.NET handles all my checkouts in the IDE and I can see what's checked out and what someone else has checked out. Is there a comparable capability in Eclipse?
3. Could you expound on (or bust a link to) the refactoring capabilities you mentioned?
Thanks in advance for taking the time to answer. Eclipse seems like a platform with a lot happy users, and I want to find out what it can do.
Back in the day (about 10 years ago), there were many more forced upgrades bceause the advances in hardware and software were coming at a much quicker rate than today.
Recently, the frequency of forced Windows upgrades seems to be about once every 5 years: 95/98/ME to 2k/XP. I mean, we all know the former series of OS' were reasonably crappy. Why would you still want to use them anyway?
Furthermore, Longhorn isn't going to be adapted by the business community for a very long time, because there aren't going to be any applications that require it for a very long time. This means that 2k/XP will be supported for a while, longer than 5 years, which to me, is a reasonable lifespan for an operating system. I'd go so far as to call it quite good.
While the hardware requierments might not change so much, the work in upgrading *nix from old version to new is a real bitch. I would think you wouldn't want to use a *nix from 5 years ago either, even if it is supported.
I'm aware that the cost of the platform just to develop is quite high, but Micosoft really got it right with ASP.MET:
There is very rarely a reason to mix scripting code and HTML in the web page itself - all programmatic stuff goes in what they call a "code-behind" file which is straight VB.NET class which imports (like a #include) the system.web namespace. Are there any other languages/plaforms that have such a feature? (I'm asking because I'd genuinely like to learn about them.)
I'd also like to throw out a site I've found absolutely invaluable for UI customizations on Windows Forms apps (not sure what they're called in Mono.). I seriously don't think I've had a question these pages didn't answer:
The following is an EXCELLENT book on writing scaleable.NET apps. The example the book is based on has a Windows Forms end and a Web Forms (ASP.NET) end, but most of the book focuses on writing a very scaleable business logic and data access layer.
Also, I wouldn't exactly say C++.NET is well supported, either. It seems to be a distant afterthought in the framework documentation. If you're using C++ for.NET, you might as well use C# and save yourself the trouble.
Question for the original poster: Are you referring to getting your software in line with 21CFR Part 11 regulations? I don't see how switching languages is going to help you validate your software any quicker.
If you do move to Java, though, everything I've read indicates that implementing automated unit tests in JUnit would be a very, very good idea. That way, your unit tests can serve as documentation that certain aspects of the system are validated without making a poor human run those tests.
One of the most important (and different) concepts behind Rails is that application frameworks (APIs) should come from exising applications. The dudes at 37 Signals created a framework for their one application, and that framework was so well-designed that it could be used for any general purpose greenfield (i.e. completely new development) web/DB application.
You just need to add more browserCaps settings to your machine.config or web.config files to get better output on Firefox, Opera, Safari, etc. You can find them here: http://slingfive.com/pages/code/browserCaps/
You can set your target HTML schema (HTML 4.0, XHTML 1.0, strict, transitional, whatever) as well, but exactly where escapes me at the moment. It's a project-wide setting somewhere.
Forgive me for asking the obvious, but why is this important? What would be good reasons for using what's effectively C++ .NET when there are 2 other language choices for .NET (C#, VB .NET) that are much better-suited to writing .NET applications?
.NET.
I thought it kind of was understood that if performance was a priority, you shouldn't be writing for a Microsoft platform in the first place except for a front end, let alone with a framework as performance-shitty (although much more fun to code in) as
I mean, I'm sure there are good reasons to use C++/CLI or whatever it's going to be called, but could someone explain them to me?
Thanks.
While I don't disagree with your post, I think you have the meaning of refactoring confused. Refactoring implies rewriting a single block of code to make the code run faster or more readable while not changing the functionality of that block of code. Rewtiting an entire application from scratch doesn't really qualify as refactoring, since in doing so you would have to change the functionality (moving from error codes to exceptions, per se).
This is an absolutely ridiculous statement. You think that in 5 years Python, Ruby, and Perl, primarily Linux-based languages with no underlying framework (like the .NET framework/Mono and J2EE) are going to be the majority of new development? Maybe on *nix environments, but Windows is far more widely used on client machines. That's not going to change in the next 5 years unless Linux takes a major change of direction towards a unified object model, which is frankly contrary to the entire Linux philosophy.
.NET/mono or J2EE.
Keep in mind that I'm not trying to disparage the languages. I would actually recommend the kid learn them instead of Java or C# because the languages you listed are much more different from C++ than Java or C# and will give him a much different perspective on how to solve problems. There's not really that much to learn with C# from C++ in terms of the language. The syntax is mostly trivial. The thing that would be valuable to employers would be learning the object framework, either
I often ask how well they score on The Joel Test: http://www.joelonsoftware.com/articles/fog00000000 43.html
At one interview, I heard that they have an "interesting source control system." That was a red flag.
It's not necessarily that .NET is better than Java, although the architecture seems much simpler than J2EE. It's that .NET is WAAAAAAAAAAAAAAAAAAAAAAAAY better than COM/VB6/Classic ASP/Win32.
I think you meant was "C# is to .NET what Java is to J2EE". C# and Java are languages. .NET and J2EE are platforms, although there are multiple .NET languages (even an implementation of Perl.NET, I believe), to the best of my knowledge, there's only 1 J2EE language: Java.
.NET better, because VB.NET was only created to get stodgy VB programmers to switch away from COM and to the .NET platform. The more I develop in .NET, the more I realize that in the 2003 version, VB.NET is really a second-class citizen to C#. (These issues have mostly been fixed in 2005.)
That does not necessarily make
OS kernels are entirely too performance-critical to use garbage collection anyway.
I think the more important question is "Who gives a crap how your braces are structured?" I mean, seriously... it's so far down on the list of priorities in terms of making code readable that it really should be left to the personal preference of the developer. If you're writing new code, use your own brace style. If you're editing existing code, use the original author's brace style.
There. Problem solved.
And if carriage returns and tabs vs. spaces are really affecting the readability of your code, you're either developing on a really old platform (I think the AS/whatever C compiler couldn't deal with tabs or something.) or you need to get a better development environment. I use VS myself, but I would imagine that Eclipse doesn't have issues handling carriage returns and spaces/tabs.
Microsoft's old API (Win32) is so hideous because they believed (correctly from an economic point of view) that backwards compatibility for users was more important than making an API that developers liked. Raymond Chen, one of the head guys involved with designing Win32, basically went with the idea that if any application that worked in Win 3.11/DOS did not work in Win32, then they would not upgrade.
.NET, which I think most would agree is quite elegantly designed, regardless of your political feelings towards the company that designed it. Win32 is pretty much dead as far as MSFT putting any more effort into it.
.NET Framework and is likewise (at first glace, anyway) fairly elegantly designed.
However, their current API is
Longhorn's API, WinFX, encapsulates the
Actually, according to one of the latter chapters of Code Complete by Steve McConnell, engineers are actually quite good at estimation, at least at first. It's when management attempts to pressure engineers into shortening their estimates that problems occur.
I agree with the previous poster that MFC and HTML are not particularly related. Either the submitter made a mistake in naming his technologies or a troll question got posted or something.
However, let's assume that the story is true. Let's make another assumption that the problem the submitter's friends is not that management is taking what the developers feel to be their IP, but that management is trying to release something cross-company that isn't remotely ready for prime time.
This seems to go against the general trend of suggested lies and deceit that I've seen in the comments on this article so far, but here's what I would suggest:
Just be open with the business people - explain what you see as the consequences of them releasing this software with the current schedule, but stick to the facts and stay away from emotional or personal characterizations, like thinking about people as PHB's. Explain that the software is not documented or tested, and if they release unfinished software, it will probably be unreliable. Explain that the more critical the software is to the business, the more rigorously it has to be tested and documented. Explain that if they want to put this into production, they should have an experienced developer and/or project manager work out what needs to be done to get the software finished, and product a project plan, documentation, and most importantly, a test plan.
But also explain that you understand there are business considerations external to the technical side and that you feel your role is to explain to non-technical people the technical impact of their options.
That's what I would do.
It has nothing to do with programmers being lazy. I'd much rather work smarter using higher-level tools and get a lot more done. It has everything to do with this simple fact, which wasn't (as) true back in the old days:
Hardware is cheap. People are expensive.
Think about it. A desktop with current hardware costs under $1000 these days. Lower-end servers run about the same amount. Compare that to how much you cost your employer per hour. How does it make economic sense to (most - don't you embedded and low-power computing people get all up in my grill) optimize software at the low level you're suggesting? Most software for the end user spends most of its time waiting for user input or doing network operations, not reversing strings.
If you want to optimize something, optimize the architecture. Pool database connections, reduce network traffic, change object relationships to make them more efficient, but for god's sake don't waste your time reinventing low-level functions that have been done written and more importantly, DEBUGGED to the nth degree.
I strongly disagree that we should be encouraging people to think about optimizing the optimizied wheel. Spend your time thinking about bigger and better software problems.
You are completely offtopic (as am I in responding), but you're also incorrect. VB.NET (.NET framework 1.x) is VB7, just as .NET Framework 2.x is VB8. It's even referred to that way in MSDN white papers. However, you are correct in your observations about MSFT breaking backwards compatibility in VB.NET and the crappyness of the converter. While the version is labelled 7, it might as well be a whole new language.
It's bad practice to reuse the variable. (I'm sure many books have reiterated this, but Code Complete by Steve McConnell comes to mind as a place where I definitely remember reading this.) Performance-wise, it will not make any significant difference, but in terms of readability and correctness, if those loops are 40 lines apart, you're going to have a tougher time debugging and a much greater risk of making a logical error. The best practice is to declare a variable right before it's used, and to use it once and only once.
I have the print edition. There's an intro by Joel for each essay of about 1 page. The book itself isn't that big... I read it in a few days. It is, however, an awesome book, and I would recommend it unconditionally to just about anyone who's interested in software engineering.
That's a rather fatalistic thing to say. Not all developers make lousy UI designers... I think it depends on what kind of developers we're talking about.
If we're talking about (an admittedly stereotyped and over-simplified) *nix developer who writes code that's only used by other developers and thinks of the command line as the ideal tool to get things done, or the idiots who designed the GIMP UI... s/he's probably not a good UI designer.
However, there are plenty of developers who write code that users interface with more or less directly who have very good UI design skills.
I don't even think that's what MSFT is releasing, although I did not RTFA very closely because I didn't see much content - mostly marketing babble. I think they're talking about graphic designers who make the actual pixels on the widgets.
BTW, If you're a developer, and you think all developers have crappy UI skills, you'd probably do best to read a book or two. I recommend Joel Spolsky's (of Joel on Software) "UI Design for Programmers."
Yeah, but you have that problem with all of the ORM libraries I've looked at. Hibernate/NHibernate has the same problem - it uses its proprietary HQL. At least it provides you a layer of abstraction so you're not completely locked into a database vendor, although I can't think of an example where different vendors implement basic statements like INSERT, UPDATE, and SELECT differently...
You seem like you really know both platforms well. I'm currently a VS.NET devotee, but I want to learn more about Eclipse and what the names of the plug-ins I'm looking for. Would you mind answering a few questions:
1. Can I do visual design of OS-native UI elements like I can in VS.NET? e.g. Can I drag a combobox (or whatever it's called in Java) onto a form and resize it using the mouse? If so, what plug-in(s) do I need to do it?
2. Is there a source-control system with file locking capability that integrates nicely with the IDE? Even though
I agree with most people that SourceSafe 6 sucks, I do like the fact that VS.NET handles all my checkouts in the IDE and I can see what's checked out and what someone else has checked out. Is there a comparable capability in Eclipse?
3. Could you expound on (or bust a link to) the refactoring capabilities you mentioned?
Thanks in advance for taking the time to answer. Eclipse seems like a platform with a lot happy users, and I want to find out what it can do.
Back in the day (about 10 years ago), there were many more forced upgrades bceause the advances in hardware and software were coming at a much quicker rate than today.
Recently, the frequency of forced Windows upgrades seems to be about once every 5 years: 95/98/ME to 2k/XP. I mean, we all know the former series of OS' were reasonably crappy. Why would you still want to use them anyway?
Furthermore, Longhorn isn't going to be adapted by the business community for a very long time, because there aren't going to be any applications that require it for a very long time. This means that 2k/XP will be supported for a while, longer than 5 years, which to me, is a reasonable lifespan for an operating system. I'd go so far as to call it quite good.
While the hardware requierments might not change so much, the work in upgrading *nix from old version to new is a real bitch. I would think you wouldn't want to use a *nix from 5 years ago either, even if it is supported.
I'm aware that the cost of the platform just to develop is quite high, but Micosoft really got it right with ASP.MET:
There is very rarely a reason to mix scripting code and HTML in the web page itself - all programmatic stuff goes in what they call a "code-behind" file which is straight VB.NET class which imports (like a #include) the system.web namespace. Are there any other languages/plaforms that have such a feature? (I'm asking because I'd genuinely like to learn about them.)
It just makes everything so much more readable.
I'd also like to throw out a site I've found absolutely invaluable for UI customizations on Windows Forms apps (not sure what they're called in Mono.). I seriously don't think I've had a question these pages didn't answer:
t .aspx
The Windows Forms FAQ: http://www.syncfusion.com/FAQ/WindowsForms/Defaul
The following is an EXCELLENT book on writing scaleable .NET apps. The example the book is based on has a Windows Forms end and a Web Forms (ASP.NET) end, but most of the book focuses on writing a very scaleable business logic and data access layer.
0 591453/qid=1123608876/sr=8-1/ref=sr_8_xs_ap_i1_xgl 14/102-2316263-0372969?v=glance&s=books&n=507846
.NET, you might as well use C# and save yourself the trouble.
http://www.amazon.com/exec/obidos/tg/detail/-/159
There is also a C# version.
Also, I wouldn't exactly say C++.NET is well supported, either. It seems to be a distant afterthought in the framework documentation. If you're using C++ for