Even though I’m not a programmer, I still know that while some programmers like the idea of graphical programming, whereas others shun the concept completely, opting for a more hands-on approach. While Microsoft is quite active in the field of graphical programming, the company’s own high-level coders aren’t very keen on the idea.
During a round table discussion as Microsoft’s Professional Developers Conference, several of the company’s own high-level programmers told how they prefer the old-fashioned way of programming – namely, using a plain and simple text editor.
“Do people want to draw pictures [to program]? Sure, I guess. But if you grew up programming when I did, you did it in text. And I think we lose that at our peril,” said Don Box, a Microsoft Distinguished Engineer “I will fight you if you try to take away my text editor.”
Jeffrey Snover, the man behind PowerShell, more or less believes that visual programming tools are useless in both complex as well as simple situations. “Graphical programming environments are usable when they are useless, but unusable when they would be useful,” Snover said, “When there are five things on the screen, you can burp that out [in text]. But when there are 500 things, [graphical programming] is completely unusable. You zoom in and zoom out and you lose all context. I think it’s just smokin’ dope.”
The gentlemen also touched on the concept of managed code. One of them believes that writing code as optimsed as possible for the machine it runs on (i.e., the opposite of managed code) will become popular again because chip makers will start to hit walls when it comes to making their products faster. The solution, then, is for programmers to once again – like it used to be in the good old days – optimise their code like crazy to improve speed, instead of relying on the next round of chips from AMD and Intel to speed things up.
“I think we have maybe five to 10 years left [with Moore’s Law],” said Herb Sutter, lead designer of Microsoft’s C++/CLI programming language, “Optimizations will get very, very sexy again, when people realize how we pay for abstractions.”
As someone who isn’t a programmer, I can mostly nod and smile politely whenever subjects like this come up. However, you in the audience over there, there are a lot of programmers among you. How do you feel about these things? Are you a die-hard Notepad guru, or do you use more visual programming tools? And what are your thoughts on code optimisation? Will it become popular again?
The linked article seems to use “graphical coding” to mean at least three different concepts…
Yeah, under graphical programming I would put products such as Simulink, LabView, or MaxMSP, where you connect blocks together on a canvas to create the final program. That has nothing to do with an IDE like Visual Studio, Eclipse, or Qt Creator.
Anyone programming in Notepad these days is just an idiot that likes to waste time. It’s not a debate, it’s just braindamaged not to take advantage of a good IDE.
A good IDE (such as Visual Studio for .NET languages, Qt Creator for C++, Eclipse for Java) will not take any control away from you, but will help immensely with code completion, integrated debugging, integrated class references, refactoring, source control, GUI design tools, etc etc. Given two developers of similar skill, the one taking full advantage of their IDE will be way more productive than the one that’s coding with a basic text editor.
Edited 2009-11-30 01:14 UTC
I would say it depends on the language. C++-ish lanaguages are quite verbose, and you need a pretty powerful tool to manage the amount of code you need to write for even simple things. Less verbose languages, I will choose a set of lightweight tools every time over an IDE.
Hear, hear. It indeed depends on the language. In Java or C# having a fully-featured IDE makes sense, they have huge class libraries that are difficult to memorize, and their OO and package-based nature make them fit for IDE use.
On the other hand, I cannot imagine writing Prolog or Haskell in an IDE. Both have a relative small set of predicates/functions that are easy to memorize. While autocompletion of identifiers may make sense, there is not much to gain beyond that. Mind you that these languages have very different purposes, you’d would never write forms or ‘business methods’ in Prolog, while it makes e.g. parsers trivial.
In my daily work I tend to use languages where a plain-editor is better-suited (or the only option). But if I have to edit some Java code, I’ll use Eclipse any day, because it is far more painful to do in a text editor.
Actually, being able to see the type of a function is very, very useful in Haskell.
Sometimes, I do find memorizing all the classes and methods and your variables etc. etc. etc. too much. You may easily have spelling/typing error, extra ‘s’s at the end, etc. etc. IDEs simply come to help.
For very small scripts though, I use VI cux I find its operations much faster.
LabView. *Shudder*.
The productivity of a software developer is not given by the tools he uses but by their own skills; so, a brilliant developer will be more productive using his emacs, vi or notepad than a mediocre developer using NetBeans, Eclipse or Visual Studio.
I don’t consider myself to be brilliant, so, I DO like to use QtCreator and NetBeans to do my development, but I do not use UI designers because its generated code is simply very dirty, unelegant, hard to maintain, hard to read, etc. etc…. but though I use IDEs to do my developments, I respect a lot to the people that creates great things using vi.
Brilliant programmer with proper IDE will be more productive then brilliant programmer with notepad. This is an axiom.
Also: every person that works in three different environments will be more productive with vi than with three different IDEs
You can not compare workhorses like vi and emacs with a demo program like notepad! Also, integration of vi and emacs in UNIX environment can not be compared with … well non-existent integration of notepad. By cursing it two times i gave it too much credit already.
just to quote a post on this topic from slashdot:
source: http://tinyurl.com/yhodowd
I think by graphical coding you are referring more to the modern IDEs like Visual Studio .NET.
Although some Microsoft developers mentioned they preferred the old fashioned ways, most MS Developers do use VS.NET as I have observed in Channel 9 tech videos.
By the way your kind of confusing me when you say high-level programmers. High level (.net, web) programmers are more likely to use IDEs than low level (assembly, c++) programmers, I think you were meaning experienced when you said high level.
The reason for that is that C++ is extremely hard to parse and has no introspection api, so making things like refactoring tools for it is quite difficult. Once you throw that out the window, all that is left is the editor, and there are many better editors out there then what ships in studio.
What like?
I’ve coded C++ in Kdevelop, Eclipse and Visual Studio (as well as a number of smaller environments I’ve long since forgotten the name of) and found MS product to be a far nicer environment to program in.
Unfortunately for me though, MS VS is Windows only product and I’m wanting to program on Linux (for a number of personal reasons)
So if you know of any good IDEs that are not only Linux ready, but also outshine VS, then I’m genuinely keen to hear your recommendations
I’m kinda partial to NetBeans. It support quite a few languages, and I use it to program in C (no, not C++) and in Java. It can do PHP, Pytthon and Ruby as well.
The main reason I like it is because it will stay out of your way, and it will not move an existing codebase to some workspace if you import your existing code into NetBeans.
And, it’s free too.
I couldn’t get on with NetBeans on Linux when I tried it.
It seemed slow, ugly and not really filling a void that Eclipse may have otherwise left.
I’ve since rebuilt my programming workstation, so maybe I’ll give it another try
Latest NetBeans is tons of times faster then Eclipse in every scenario. I’m using both on multiple machines (from single core 1gb laptop to multi-core 4gb desktop with all the bells and whistles).
Yet NetBeans is not so overbloated with functionality. Sometimes something is missing…
Well I’ve given NetBeans a try (ArchLinux) and it’s definitly slower on my laptop (ASUS Core2Duo 1.3(ish)GHz and 2GB RAM) compared to Eclipse.
That’s not to say there’s a signficant different nor that either is all that snappy.
Overall, though, I’m still not impressed with NetBeans.
It just looks and feels like a slug (where as Eclipse, though still slow, it feels more intuitive to me)
I’ve also tried KDevelop4 – which is still a cluttered mess.
I can’t develop applications in an environment that feels messier than the code I’m trying to impliment.
QT Creator, however, /has/ impressed me.
It’s tidy yet (thus far) has most of the basic functionality I use.
So I think I’ll stick with QT Creator for a while and see how it performs in the long term.
Edited 2009-12-01 17:24 UTC
Yeah NetBeans is pretty good. It is Java-slow, but not as bad as Eclipse and has a much less insane UI.
KDevelop is ok, but again, the UI is just too cluttered and messy. And autocompletion never worked (maybe they’ve fixed that in KDevelop4).
Visual Studio is clearly one of microsofts best products, and one that they deserve high praise for. The autocompletion in particular is almost unparalleled. The only UI that comes close in my opinion is…
Qt Creator, which has autocompletion that works well (!), a simple UI, isn’t a slow Java program, and has a very nice text editor (you can even get it to show whitespace which I think is rather nice). It is lacking in a few key features (e.g. you can’t organise source files into folders), but despite this I think it is definitely the best C++ IDE available for linux.
Can you build CLI apps with QT Creator or is it strictly for building QT GUIs?
Edited 2009-11-30 12:47 UTC
Sure you can build cli apps. You can even build apps that don’t use Qt at all, not even the non-gui QtCore library, but Qt Creator is really optimized for Qt-based projects. And if you are building a GUI app, you don’t have to use the visual designer component, if you prefer you can just as well create all the widget hierarchy and layout by hand.
I actually use Qt Creator for my projects written using my own hand-made make files and it works like a charm.
KDeveloper4’s insight in your code, and consequently its autocompletion and tooltipping is really great these days. And Qt Creator has progressed quite a bit beyond the phase when it couldn’t show the folders your code is organized in.
EMACS?
Come on… there are so many things it can do.
And isn’t UNIX something the runs as a process managed under EMACS?
I assume this “Windows” you speak of would also be a process managed under EMACS.
Cheers.
C-x,C-c
When it comes to IDEs, IntelliJ IDEa is my favorite out of what I have used. IMO the thing that studio does hands down better then anyone else is debugging, but things like refactoring, unit testing, and code generation is either lame or non-existant, and I wouldn’t even consider it in the running for best without another commercial addon like Resharper, or CodeRush.
By editor, i meant just the editor bits, not the full IDE. My favorite editor out there is textmate, it has the best highlighting/indentation I have ever seen (except for maybe emacs), its code generation features are the best I have ever used (very fine grained and template driven), and great code navigation features. It is basically the useful bits of emacs if it were designed today, and used ruby instead of lisp.
On windows, my favorite is the e-texteditor, which is basically a clone of textmate that is missing a few things (including polish), but has additional things (like an implicit version control system).
On linux, I find it is a bit more sparse. I am definately a vim guy over emacs, if you want a great vim setup to start with, search github for scrooloose, and build off of what he has going. I consider vim an invaluable skill for any programmer, just due to how it is installed on pretty much every unix machine, and its great ability to jump around code, or munge files using macros. I have tried emacs, but the whole key chord thing is a bit much for me, and I find the learning curve (while not as steep) is much longer then vim. One I am watching very closely is redcar, which is another textmate clone (see a bit of a trend here? ), but is pretty far from being done. Also, e is in the middle of getting ported, but it is not done yet either. Currently, I just use gedit with a whole boatload of plugins.
All that to say, if you do java stuff, I would highly recommend IDEa. If you venture into the ruby/python world, check out textmate or one of its clones.
Build the QT SDK using Visual Studio and install the QT VS-Addin from Nokia. Then, You can program in Windows using VS/Qt and using CMake, compile your program on Linux and Mac OS X.
That’s not going to help with my CLI apps with POSIX threads though.
I deliberately try and code as close to ANSI C++ as I can for code portability, but my point was I don’t want to program in Windows as I pretty much use Linux for everything else.
As a Linux user – to pay for a Windows licence just so I can write apps for Linux seems like madness.
Just because someone has to say it, I really like Vim.
I don’t really like Eclipse or NetBeans, for a variety of reasons. I’m using QtCreater now, and it’s one of the better (and lighter, I think) IDE’s that I’ve tried… but I would still prefer to be working in Vim if I could (my managers are insistent that I use QtCreator). That, and I don’t know that I’d use QtCreator if I wasn’t working with Qt.
JEdit is nice, especially after you install a few plug-ins; I think it’s worth a try, at least. And Kate is nice, if you’re working in KDE.
But I’m a fairly novice programmer, I’ve only been out of school and in the work force about 13 months.
I think some concepts from original article are being lost here.
When the MS folk talk about Graphical programming environments I do not believe that they are talking about an IDE where you write code, but rather are talking about manipulating graphical concepts/shapes to create program flow. I am not a big fan of visual designers, that make programming sorta like using Visio to write code stubs. Its not much of a leap that graphical shapes could be made to define actual instructions, that would normally have been coded(as text). I am sure there would be frameworks that do that. Indeed, I have seen IDEs for youngsters that define instructions by the manipulation of graphical metaphors.
I believe every tech has its place, and caters to a particular audience. For instance, I am creating a graphical rules generator for a non-techie audience. I wouldn’t expect a hardcore programmer to be pleased to use it, but for an audience of business managers or business analysts it eliminates the need to know any specific language syntax or technology framework. These rules could quite easily be understood or manipulated by anyone, and can be domain specific. Incidentally, for my rules engine, the rule designer is optional and you can write the code by hand if you prefer, but this opens up room for error and really requires a knowledgeable programmer.
I’m not entirely sure what’s being talked about here, but if they’re simply referring to programming environments then I kind of agree.
Notepad is a little too ascetic for me, I use emacs. I think a decent shell + text editor + standard *nix utilities are the pinnacle of software development, no doubt they’re harder to master, but when you do, there isn’t a GUI IDE that I know of that can match them in speed, ease of use, or features, and I’m fairly familiar with Visual Studio, XCode and have had the occasional foray with Eclipse & NetBeans.
When I write GUI programs though, I will use Qt Designer or Glade. The lines seem kind of blurred to me, but I wouldn’t consider these programming tools, more like design.
There are two very different subject here, programming and optimization:
1. Programming
When people program, they mainly have one goal: making stuff work, preferably in a future-proof way. The way you achieve that is your call. There’s no doubt that there are several programming tools that can help you along the way, such as syntax highlighting. No one can say that the visuals hints in syntax highlighting are a bad thing. There are also lots of cool stuff you can do to help you better deal with your code, like code folding, but that kind of stuff is independent of whether you are using a graphical or a text-mode editor. GNU Emacs can do most of the stuff that Eclipse does, but in a different way. Which way is the best for you depends upon you.
1.1 More on programming tools
When we talk about programming tools, we can also talk about code generation tools. For me, using a WYSIWYG to build non-prototypical HTML is abhorrent! Most of the time it makes the code horrible and unmanageable! On the other side, Glade for GTK+ is kind of nice. You decide.
2. Optimisation and high level languages
Early optimization is the root of all evil.
There’s a place for high and low level languages. The most reasonable thing to do is use high level languages for prototyping and building the application as fast and as easy as possible. Then, if you feel there’s a part of your code that needs to perform better, you can optimize it in different ways, even by using another language.
But you have to think before you build stuff! Optimization is less about code and more about algorithms. There’s no point in using a low level language, doing manual memory management and performing every thick in the book to save a few CPU cycles when your approaching the problem in the wrong way!
I really, really, don’t believe that code will be manually optimized for CPUs again, except in very specific cases. Developers’ time costs money.
Thats pretty much how the ruby world works. You write your apps, find performance hot spots, then write those in c and call out to them.
Just looking at the quote…
Premature optimization is the root of all evil. – D. Knuth
Don’t forget the counterpart:
On the other hand, we cannot ignore efficiency. – Jon Bentley
In my opinion it is really a problem of using the right tool for the problem. Choosing the right language for the level of efficiency you expect to need.
I personally think that the whole “let^A's invent a language that solves everything” is the wrong approach. The right approach is being able to jump, inside the same system, from higher levels of abstraction to lower levels, while trying to keep it as simple as possible. For example I really like the Objective C way (even though it is not perfect) of being able to write using a flexible object engine, while jumping to plain C in some places… and then going down to intrinsics/assembler were needed. And being able to go even higher-level with things like F-Script to prototype and make tests is not bad either.
BTW: The title is quite sensationalist with that “Notepad” reference. It would be more like emacs/vim + shell + scripts. Or just another the monolithic way (IDE) versus the set of tools that work together… and you will basically find the people of the *N*X way in the second (the right ) side. But even then, in the article linked they were talking about a completely different issue.
Notepad? Didn’t you guys read xkcd?? Real programmers use Vim
On a more serious note, they really use notepad? I find that difficult to believe.. You know, there a plenty of good text editors for programmers out there.. I can’t even imagine programming in notepad after knowing textmate or even gedit with gmate enabled…
Real programmers use ed, and resort to vi or emacs if they must. Its a dying breed, but worth reading about in history books.
No, REAL programmers use cat!
I love XKCD.
Second.
ed is the standard text editor
See: http://www.dina.dk/~abraham/religion/ed-standard
If you do the integer division of 0xED by VI you get 27(0x27). 27 is the decimal value of the ASCII code for ESC(033). Which is the key you press to access editor mode in vi.
Edited 2009-12-01 03:06 UTC
Real Microsoft programmers, on the other hand, use edlin.
The software I work on, we’ve got files that wouldn’t even *open* in Notepad…
I’m tempted to think that the use of the word ‘notepad’ was just supposed to me a metaphor, something everyone (non programmers alike) can relate to in terms of text editors. You guys are absolutely right though; no real programmers uses notepad – except for perhaps the occasional edit of a 20 line config file on a remote machine that doesn’t have the permissions to install any other software.
Edited 2009-11-30 03:56 UTC
Back when I had eyesight to program I had to WRITE MY OWN Notepad just to get anything done !
I like good IDEs (like Eclipse and NetBeans might be some day in the distant future) that aid my way of programming. With auto completion, inline help, refactoring support, on the fly error checking and compiling etc. I think it is much MUCH faster to write e.g. a class (only data not procedures) in such an IDE as to model it with a fancy UML tool. I dream of a IDE that draws on the fly the UML representation to the classes I write. Then this tool should support “formatting” of these diagrams in a graphical way and save this representation information in an extra style sheet.
I think complex and detailed information is completely infeasible to do with pure visual programming. However, an abstract simplified graphical representation of things can tremendously help you understand the code. These days one first draws some UML diagrams and then writes code. Then there are requirements updates and the code gets updated but the diagrams aren’t. This is annoying. Tools that automatically link code with diagrams (and provide good and easy requirements tracking and such) would be great.
So it’s not text based programming Vs. visual programming, it’s about how these two things are best merged.
I think you’re completely right on this one. For example, autocompletion helps me get what I want programmed without having to spend extra time just memorizing and re-looking up all of the available functions – especially when some of them are overloaded in 20 different ways. In that way, the IDE is a lot like a really fancy text editor. When I think truly “visual” programming, I think dragging and dropping components onto a campus, and then using the mouse to select attributes, methods, and the like.
A really simple IDE is used kinda did that. It was bone basic (It didn’t even support adding nonstandard libraries), but it worked.
It would auto generate UML (they did take some liberties with the standard, but it was pretty good), and show all the connections in your code.
The best part about it was it made for an absolute awesome debugger(which I never realized until leaving it). You could arbitrary instantiate a class, and do whatever you wanted with it: change variables, call methods, use at as the variable of some other object. While it was doing this, you could poke around and check its state (and the states of all objects it contained) in a nice graphical way.
I know visual studio does this, eclipse probably does as well.
For all practical reasons its a pretty useless feature. It is sort of nice in team meetings when talking about architecture though.
Check out some of the features that IBM use on top of Eclipse in some of their products like Process Server & Message Broker and you can see what can be done.
I use these almost daily in my job.(not at IBM I hasten to say)
For scripts etc, I find one of the meny excellet Text editors are great. I use UltraEdit on Windows.
Back in the day of VT05 & VT52 terminals on PDP-11’s & VAXen, my editor of choice was Teco. You could even edit binary files with it.
runtime syntax highlighting can make the difference between avoiding errors that could have a great yet subtle impact on the code (or correcting them with little hassle) and having to debug an ill behaving application to realize a variable’s or a method’s name was mistyped
so, it’s a true time saver for me … that, the fact modern IDEs allow for in place code editing during debugging, and that with quick fixes immediate changes or refactorings are two clicks away – maybe it’s just a saved second for each operation, but seconds become hours at the end of the week
now, for a sw designer who loves implementing elegant and efficient solutions written in readable code – but is unfortunately slow at typing (due to carpal tunnel among other things) and still makes typos, regained time is never enough – but any developer can benefit from even marginal time savings, since time not spent on mundane tasks is time that can be spent on the program itself, on the design patterns or on the algorithms behind it
BTW, xkcd explicitly stated real programmers use butterflies (http://xkcd.com/378/ )
Edited 2009-11-30 01:46 UTC
Umm no they use emacs! Read the comic to the end.
No one should feel any sense of pride using notepad Code completion and the like are wonderful tools given by any IDE.
That said, I don’t think the MS programmers were talking about IDEs. They were talking about trying to remove the code from programming by GUI… maybe UML or whatever.
Unfortunately, I don’t think we’ll ever get there just because computer programming languages are really good at what they do. If you think about it, they are pretty basic structures (if, else, while, for…). If you can follow a flow chart, you can code it. Everything else is just knowing what functions to call, and of course there are advance concepts…
I taught computer science in high school. It’s amazing the gap between students. Some get variable assignment. Some just don’t. I don’t think some people can make the mental model of variables, sequential steps… Once they get it though, it doesn’t matter if its GUI or code.
That said code generation and the like is good for certain things. I can’t recall the last time I manually coded a GUI. To specify a GUI, what better a tool than a WYSIWYG tool.
I’ll say it this way. To specify logic and sequential steps, what better a tool than a programming language designed specifically for that
I’m no IDE jockey but that’s a pretty damn retarded argument. Knowing how to use on obsolete technology doesn’t make you a better driver.
However, with that in mind I’d like to argue that people who don’t know how to manually hand-crank the engine aren’t fit to drive.
Edited 2009-11-30 02:13 UTC
If that guy pumped his brakes on ice, he’s lucky he didn’t die.
But I’ll agree that this is a dubious analogy, as having antilock brakes on a car assists in only one aspect of driving. You still can’t be jerking the wheel, following too closely, or talking on your cell phone on ice (or in any other driving conditions). And ABS does not create traction where there is none.
Edited 2009-11-30 16:37 UTC
I’m perfectly happy using vi and kate, really. It’s not like I hate eclipse, but the plain text editors with highlighting get the job done for me right now.
As someone who has seen and tried a little LabView (graphical programming language) code before, I hope that *never* becomes the way people program. The code looks like a messed-up circuit diagram, except the layout often has little to do with the actual meaning of the code. Also, using even simple data structures is awkward, not to mention trying to do any proper OOP.
My programming needs cover:
* Text and documentation – 50% (I use a text editor and HTML rather than a word processor (I probably need to get out more))
* HTML/CSS – 35%
* PHP – 5%
* Python – 5%
* JavaScript – 5%
All in a Windows environment. I have tried lots of different editors (I have an obsession ) but keep coming back to plain text editors. I used to use TextPad but several year ago switched to EditPlus3. What these two have in common is a feature called “Clip Libraries” where the say HTML library is displayed in a column beside the main editing window. Double click on the “Paragraph” entry and the Clip Library inserts “<p></p>” at the cursor position or around selected text. This is a rather simple clip, but they can be much more complex.
Syntax highlighting and the ability to be able to run a script from the editor (HTML and Python in my case) is also very useful.
My ideal editor/IDE must have a clip library capability.
Regards,
Peter
Isn’t the point that Microsoft makes lots of low-level platform code, which needs to be highly optimized? Higher level languages make sense for Microsoft customers, but don’t necessarily make sense for Microsoft itself.
Disclaimer: I write filesystem code for Microsoft, and I don’t believe it would be feasible to do so in Visual Basic.
Edited 2009-11-30 02:43 UTC
…but it should be perfectly feasible in Visual Studio. I know the DDK discourages this and wants you to write makefiles and use the DDK build environment, but I’ve written driver projects with VS without trouble.
Heck, even if you insist on using the DDK build environment for building, you can still use the VS IDE for writing the code, and take advantage of features like inline help, intellisense, the code browsing features etc.
As others have indicated, the article (and osnews followup) are confusing language and editor/environment. My post relates to the former.
In terms of environment, in my group everyone uses their environment of choice. Many do use sophisticated IDEs. Personally I use vim. Completion would be nice, but it’s not a deal breaker; the most important thing to me is to be able to navigate around code quickly.
Have you tried hitting ctrl+n?
vim usually.
If I was writing graphical applications, I’d probably use NetBeans.
In college we used emacs and just did command line programming. Nothing graphical at all which really pissed me off. All C, C++, Perl, Bash .. lots of system programming.
Don’t get me wrong, it was interesting and taught me a lot, but I hate command line programming.
In my junior and senior college years I took some VB courses and loved em. Also took some web development classes where we used both notepad to make a simple web page and then used an actual WYSIWYG editor .. I liked the latter much better.
I’m now using Visual Studio 2008 for home stuff and Visual Studio 2003 at work (both for Visual Basic)
I’m definitely more a graphical programmer now since I’ve had to work with the command line for so long.
Soldering iron, peek, poke
At work, I use C#. It does a lot, but it also does a poor job in a lot of things, and takes a ridicules amount of computer power to do it.
On my free time I do stuff in ruby. I have yet to miss Visual Studio, code completion, languages filled with useless boilerplate, or compile times. At work, I really find it a pain in the ass when I open up a solution and it takes 45 seconds for my ide to load, or when it decides it is going to do something for awhile and not let me work, leaving me to watch a hard drive light flicker.
It all depends on what you are working on, and what you need to do the job. When you dont realistically have an option, IDEs are great. When you have a choice, I will chose an editor / shell + command line tools every time.
I’d choose a more powerful computer if that’s what it takes to get the IDE running smoothly – for anything but small projects, I’d hate not having powerful code navigation features.
Visual Studio 2008 is a breeze even on a relatively modest computer (2GHz dualcore laptop (which means slow HDD) and 2GB ram). Compiling can take a bit of time for release builds of C++ code using lots of templates, but debug builds are usually just fine
In textmate, command-T is a really great “fuzzy” search, and shift-command-T is go to symbol (class/function/etc). I actually prefer this, because my hands don’t leave the keyboard.
I’ve got a 2.26ghz dualcore laptop with 4 gigs of ram and two (albeit slow) hard drives, and visual studio is enough to kick the fan up. At work, i have a quad core with two hard drives in raid-0 and 4 gigs of ram, and visual studio still takes ages to start up and enjoys to take breaks every now and then.
(Primary a windows programmer)
Windows
——–
Visual Studio 2008 – C#, asp.net, C++
Notepad++ – for adhoc code editing where VS is overkill
Linux
——
Monodevelop – C#, Mono, .net
Eclipse – php, C++, java
Gedit – bash, for adhoc code editing where IDE is overkill
I never really had the time to figure out how to use emacs.
I’am too.
~90% Visual C# / .NET 3.5
~5% Notepad ++ and PHP
~5% Monodevelop.
Before .NET and VS I used Delphi/Kylix, and I wrote
a relative big GUI application with wxGTK/C++ and KDevelop.
IMHO the good IDE with code insight, integrated debugger, code formatter, refactoring is very important if you write a bigger code then “Hello word!”. I can write C++ code with a simple notepad, but it is not too productive. The minimum is the “lightweight” C++ IDE (like KDevelop, Anjuta, Dev-C++, Code::Blocks).
I tired vi and emacs, but this things are very far from the current GUI/text editing standards.
The visual code generation tools like windows.forms designer also very important things. The hand-writed GUI code or xml or html are not too productive, and IMHO the html/xml is a very big backstep from the visual RAD tools (delphi, visual basic, etc) to “good old” Clipper or Turbo Pascal…
emacs is way too heavy and you usually have to install it whereas vim is always available. I hate both notepad and VS.NET. Using the mouse to write code is such a waste of time.
Developing a Windows program in a text editor is an absolute waste of time.
Using a hammer instead of a nailgun for every job doesn’t make you look manly, it makes you look like an amature.
Four xterms and emacs. Toss something like version control system and cscope in, and you have everything that is needed. Yes, I am old and boring.
I was at this session and this article isn’t the way in which these topics were really discussed. It certainly wasn’t a notepad vs Visual Studio.
I think the fact that any Windows programmer uses notepad to write their code is a complete myth. It’s completley impractical.
It was more related to current .NET methods of writing GUIs and new programming methods which are starting to appear whereby your code is partially written from a UML model.
I think it’s highly unlikely that this will ever take off.
I’m a Windows kernel developer and I use Visual Studio along with most other kernel devs. Does this mean we’re graphical programmers too??
So this guy wants to write software such as Word, Excel, Visual Studio etc in a plain text editor without auto competition, class browser, syntax coloring, create everything on the fly including adjusting X, Y, width height, SetRect, attach events on the fly by means of function pointers etc visualizing everything *rather* then using a RAD? So it is better to Ctrl+F + [insert text here] instead of double clicking and going directly to the event?
Hahahahaha…….yea sure.
You know, I was like that at one stage but when I started using RAD and when I saw how quickly I do things, I completely forgot about the plain text editors. Let me stress out, I know *exactly* what is going behind the friendly RAD so if I want I *can* build the GUI in run time but I choose not to. The only time I add GUI elements in run time is for plug-ins when I need to add a button or a text box somewhere to do stuff. Just because I choose to use a RAD, it does not make me a low level programmer. Instead, the guys that do *not* know how to use a GUI or are afraid of it are low level programmers as they are used to basic processing aka the command line – “basic”.
With plug-ins, I attach my events in run time with a lot of dynamic_cast<Inherited_Class *>(pointer) casting but seriously building an entire feature pack program with a plain text editor? You have to be kidding me…
Well, I guess, everyone has his/her tastes but I personally believe using RAD tools speed up the development process.
Edited 2009-11-30 08:45 UTC
In my experience, initially, yes, it speeds up development. But the Borland type of RAD environment tends to encourage absolutely unmanageable code. I’ve seen that time and again, in my own Visual Basic 3 code way back in the previous century, in projects at companies I’ve worked for that used Borland C++ only last year. I’ve worked on projects that had classes of more than 10,000 lines of clicked-together event handling code that would call a dozen layers deep into other code, only to grab a reference to the ‘form’, grab a particular control and take a value out of it. It’s too hard to keep track of the general design of a clicked-together applications.
I think Qt got it right here: a visual tool to click together your interface, and separate C++ files for all the logic, event handling and so on. Add a good, light-weight IDE like Qt Creator, and I’m set to work on big gui applications. (Though I’m unable to teach myself to compile and debug inside the IDE, I only use it as a glorified editor.)
As for uml and case tools that do code generation: those Microsoft programmers are right. It’s impossible for a human to successfully keep track of a big project that’s defined visually. The biggest monitor is too small for that, and besides, humans don’t work that way.
Generally speaking all I nead is a good lightweight IDE with very good autocomplete. On Windows – for practical reasons – this is vstudio + visual assist for me. On Linux I generally use Netbeans and KDevelop. Versioning integration is not a necessity, since there are good tools for that both on Windows and Linux. (I’m only talking about Win and Linux here, because these are the ones I deal with regularly.)
Visual/graphical tools as programming aids – I think of them just like that, aids, nothing more, nothing less. I don’t like people who spend weeks only by drawing up stuff, saying that the coding part is the easiest, I always called BS on that. A good coder needs a good system overview combined with good algorithmic and coding skills. Any visual stuff can help, and is OK, but I’d never take them for more than helping tools.
It never left popularity. It’s just visual kids don’t care about them. That’s a big difference. It’s a drawback of forcing posh high level managed languages on new coders, who in return sometimes even despise lower level coders. For me, it’s always the result that counts, and not all goals are about quickly throwing together fancy high level code. In my area algorithmic stuff has more importance – let’s say 85% of total development – so I couldn’t care less about managed and graphical and whatnot stuff.
It’s like using BO vs using SQL. Anyone who know SQL will find BO unusable beyond very basic queries, and anyone who does not know SQL wouldn’t use anything but BO and do anything beyond basic queries. And yet BO has its place because the coders know nothing about business and business men know nothing about coding.
I think some nonprogrammers are maybe under the impression that programming in Visual Studio means “visual” programming with diagrams or something like that. While it does include visual designers for certain things — most notably GUI forms, but also database schemas for example — most developers who use Visual Studio, despite the name, spend most of their time in it editing program code text, just like any other development environment.
Im used to the RAD environment of Delphi, i am used to my two stage approach of designing the UI via mouse and WYSIWYG approach and then coding through the IDE.
HTML however although i use dreamweaver, i tend to use dreamweaver as a color coded notepad, i don’t use the WYSIWYG for designing web forms and just use the code view.
It’s really horses for courses, everyone will have a slightly different approach based on their own working and past, there is simply no way to say which is right. However i do agree with the Microsoft developer, that all developers when entering a professional environment should have knowledge of business practices such as UML.
I like aptana studio for html and php coding. The best part is it’s free.
FWIW, OSAlert was written entirely in Programmer’s Notepad[1] and SubEthaEdit[2]. Every character, with the exception of the reusable libraries like jQuery and Kroc’s CSS, was written by hand.
[1] http://pnotepad.org
[2] http://www.codingmonkeys.de/subethaedit/
Those look like pretty nice editors.
As to the different meanings in the article:
“Graphical programmming” as in writing up a diagram (UML or otherwise) and generating a program from there: People have been promising this since the Atari ST was new. I don’t see anyone using this. But if I heard about a graphical programming tool which got good reviews from coders I trust, I’d give it a shot. An ideal graphical programming tool would be good at churning out prototypes – a perfect graphical programming tool would let a bunch of us just gather around together, and over the course of a long “design” session, hash out a rough but functional prototype so we all at least know where we’re going with something.
“Graphical Programming” as in using an IDE: Obvious. Sure, you CAN program by using a seperate text editor, formatter, compiler, refactoring tool, version control system, et multiple cetera, each of which has their own unique commands and interface, each of which requires running another program… but why would you DO that to yourself? I don’t see why anyone would be that masochistic, unless of course their jobs required them to work in such an counterproductive way.
“Graphical Programming” as in providing a user interface: Obvious.
Because you have more control and usually more power with the tools that are best at what they do.
I agree completely. I’ve never really found it so horrible to have an xterm open next to Vim, and just alt-tab over to it and run make or gdb there.
I don’t mind other people using IDEs, I simple don’t benefit much from them.
I must be one of those rare breeds called a modern programmer. You see, a modern programmer doesn’t care what tools they use. As long as the job gets done as swiftly and bug-less as possible.
Notepad or visual? It doesn’t matter in the real world.
Apple have shipped a couple of “visual programming” type tools (as opposed to IDE’s, which are just vi-with-pretties).
Automator (visual equivalent of shell scripting), and Quartz Composer (for graphics type stuff). They’re ok, I guess…
It’s worth noting though, that the electronics industry have done “visual programming” for decades (think – circuit schematics), and found that as a paradigm it didn’t scale to modern large scale designs (it’s only found as the board/block level these days) – hence the rise of Verilog and VHDL for complex chip design work. I suspect the same is true with software – it’s ok for block level modelling but virtually useless for detail implementation.
And for the record, the king of editors / ide’s is KScope – it does code navigation, but apart from that it stays out of the way…
I’ve been reading the comments here as much to see what people are using for editors these days as anything. I’ve casually used vi and emacs (and their knockoffs vim, pico, joe, mg, etc.) but haven’t done enough programming to really have learned their power features. I prefer emacs, having used Wordstar as my first word processor, but I learned enough vi to get around on some of the commercial Unix systems I used that had it (but not emacs) installed by default.
The only IDE I’ve used is the VB one in MS Office apps (to write macros). It’s helpful in some ways, as I neither have the spare RAM nor the desire to keep the VB object hierarchy in my head, but in some ways it gets in my way. I’ve also used Scite, as an example of a “modern” highlighting text editor, and like it OK.
As for “graphical” programming, it has its place. Most process control systems now use some form of connect-the-blocks-and-fill-in-their-parameters development tool. You are not going to write databases or search engines or whatnot with these. But for the problem domain they serve (process control), they work, particularly for the non-programmer or troubleshooter who needs to understand the function of the software, but doesn’t necessarily write much of it.
Platform-specific code optimization: I agree that this will make a comeback. Aside from the finite lifetime of Moore’s law argument, the other key here is that Moore’s law says nothing about electrical power budget. As more computing gets done on extremely-low-power devices, this optimization will have to happen to provide a decent user experience (poke around on your average Windows Mobile phone if you want justification).
Ideally, platform optimization will take on a new look, though. I’d like to hope that we’ll get more programming tools that directly target other programming tools (data description and functional languages->imperative languages->[aggressive optimization-friendly realm]->hardware), to help make the move from high abstraction to optimizing for a certain piece of hardware a smooth transition, allows a total rewrite of the optimized part to be an easy task, and one that doesn’t favor premature optimization as an accepted part of design.
Again and again, new things make the same C-like mistakes of forcing the programmer to manage small details of an algorithm’s implementation upfront (limiting the compiler way too much), or the academic-friendly mistake of leaving it 100% to the compiler (limiting the programmer with knowledge of how things should work, and a need to get it faster).
Edited 2009-11-30 19:39 UTC
Just a note for those to whom it wasn’t obvious: the Notepad reference was just a joke. Don’t take it literally.
Yes – as most have said, there seems to be a couple lines running:
1) Notepad/Vi/Emacs/etc vs. VS/Eclipse/NetBeans/etc
– per IDEs, sadly VS seems to be in its own class. Qt Creator is shaping up very well, and will come to be a good competitor, but nothing else really matches. Eclipse is great, but only works 100% for everyone if you are only using Java; CDT being very hard to setup and get working. (And yes, I’ve tried recent CDT installs! I have yet to get CDT to compile anything.)
– I’ve taken more to using Vim/Gvim now. I like having Intellisense when it works; but most of the time even if I’m only programming Win32 stuff under VS it’s broken. No worry about that with Vim/Gvim – just open up the header in another window (:above split <header>).
2) Drag’n Drop Programming
– This will never really catch on – at least no time in the immediate future. Sure you have some apps that do this and, as the article and summary noted, they work on a small scale, and fail miserably at a large scale. For this to work, you have to have some really great AI built-in to figure out the connections and make reductions in the logic to figure out what the program is really suppose to do – make connections that are required even when the model didn’t show it. Needless to say, such an AI is decades (possibly centuries) away if it ever comes about.
– UML doesn’t help.
3) Timing – aka managed vs. unmanaged
This already broke the java model of throw more hardware at it – relying on the CPU to increase as such, and then to have Intel/AMD/IBM/etc break the model by splitting a single processor into two at about half the original speed. Yep, they’re probably right – the time will come when it will be necessary to remove abstraction and move back towards more detailed programming, with better optimization by the programmer to start with. Sure the compiler can figure out certain things – like how to optimize a loop; but it can’t tell what the program as a whole does to optimize it such. For example – optimizing the comms between two threads; impossible for a compiler to do, and just a bit of work for the programmer. Even locking, semaphores, different kinds of shared memory – not things easy or even necessarily possible for the compiler to determine. But most programmer today don’t know the difference (sadly).
Resources, while not scarce, are not limitless either. True not every program needs to be perfectly optimized, many can get away with 50% optimization or less. That doesn’t mean that programmers need to ignore optimization though.
For example – MS made a big mistake in several areas by using bad algorithms (bubble sort). If they had paid attention and used a better algorithm (e.g. quick sort) they would have had better performance and gotten more life out of the code. In other areas though, they’ve killed performance – for example, opening Windows Explorer today (WinXP SP3) takes a lot longer than it did 8 years ago (Win2k) – why? B/c Windows Explorer has to search for every device it is suppose to show, and go through a whole list as opposed to doing proper caching with quick lookups.
on the OS: on Linux: vim, Mac OS X : vim for command line tools, XCode for graphical stuff, Windows: Visual Studio (but nothing fancy there, nothing graphical, usually). I’m thinking of trying out Eclipse on Linux. All C code. For scripting (Perl, shell), just a text editor that has code highlighting, preferably vim.
Snover joked that programming is getting so abstract, developers will soon have to use Microsoft’s in-air motion sensor game controller for the Xbox, dubbed Project Natal, to “write programs through interpretative dance.”
LOL
I think that MS senior dev were refering to visual studio lastest incarnation where it tried to do some drag and drop programming with the “windows workflow fundation”.
This on one hand can be fast and convenient provided you have the correct workflow element for your task, but on the other hand as it would be use by incompetent dev that follow stupid project requirement, you could end up with a very graphical spaghetti code (having edited SQL server DTS package I know what I meant, see [ http://www.computerways.net/images/projects/SQL2000DTSPackage.jpg ] for example).
I hate VB with every bones of my (weak) body, but one fellow pointed me that sometime it could be useful for fast prototyping or putting a simple interface to more low level library.
Now my 2 cents on IDE or notepad, ok notepad (or any equivalent) should be enough, yet having some luxury could accelerate or productivity (syntax coloring is my weak spot, auto completion is optional and should work well ).
I worked with visual studio which hide so much things from dev that they might end up using stuff they don’t understand, Eclipse and Netbeans are not so bad themselves ( especially in java refactoring, something you probably never do with notepad or equivalent ).
So heavyweight IDE have their use, through multiple wizard they make us work faster while trying to reduce human mistake ( which can be defined as productive )
I mainly use SCITE [ http://www.scintilla.org/SciTE.html ] or scintilla based IDE (geany [ http://www.geany.org/Main/HomePage ] is fast and work well enough on linux, on windows, IDEs are a little bit more stupid with utf-8 handling I ended up with flexedit [ http://www.flexedit.org/ ]).
Edited 2009-12-01 05:48 UTC
I used to do lab demonstrations in a course called Algorithms and Data Structures for a university.
I had one guy who would write their code – Java, mind – in Notepad and then compile it in the command prompt. If his code didn’t work, he’d ask me for help fixing it. The only debugging information came from about sixty System.Out.Println() calls in the code, and any exceptions it might have thrown.
Please, people! If you’re writing code and need someone’s help, have the decency to put it in a proper IDE or use a debugger. It will make a huge difference to that poor soul’s day.