Computer Science Canada

The Advantages of Eschewing IDEs for Learning

Author:  wtd [ Sat Jul 16, 2005 1:56 pm ]
Post subject:  The Advantages of Eschewing IDEs for Learning

Integrated Development Environments can be very handy, but for the most part, they are designed for programmers building large complex programs, rather than students learning the most basic aspects of programming.

What's a project?

When a student sits down to write his or her first program, that program won't be anything large enough to even remotely be classified a project.

Yet most IDEs will at least encourage a user to create a project. Yes, single source code files are often an option, but why present the choice at first? Offering students choices at this point in their education is just unnecessary confusion.

Using a text editor and command-line compiler this is not a problem.

Where does the compiled file go?

So you set the location of the compiled program in a dialog. Well, you have to know how to find that dialog, but that's not even the primary problem. Once you've set that, you can forget about it.

Beginning programmers should always think about what's going on: what they're creating and what they're changing.

But I have to know how to use the command-line...

Get over it.

No, seriously. Suck it up and learn. It's an incredibly valuable skill, and it gives one additional insight into the nature of directories and files.

What is source code?

IDE users may be tempted to think of source code as something magical. Some special data format.

Source code is plain text. Using a plain text editor to write a program will make that apparent.

Automatic API docs are bad

They're handy later on, but knowing how to manually search for information on the API you're using is vitally important.

Google is your friend.

IDEs aren't forever

IDEs get updated, replaced, rearranged... and one's knowledge about how to use a particular IDE is quickly outdated. The underlying programming languages, though, are typically much slower to change. Invest your time in learning the language.

IDEs have specialized tools...

Command-lines have general purpose tools.

Think in the abstract. You have tools for processing plain text at the command-line. You have source code that is plain text. Therefore, you have tools for dealing with source code.

Author:  Delos [ Sat Jul 16, 2005 2:32 pm ]
Post subject: 

Good way of looking at it, I'd say. Now, since we the masses are hardly ever satisfied, would you be able to provide some examples (perhaps in Ruby) that show how using command-line has advantages over IDE? I have a funny feeling that this is a lot easier said than done...but you're creative! Laughing

Author:  1of42 [ Sat Jul 16, 2005 3:37 pm ]
Post subject: 

While I'm starting to see what wtd means by pitfalls, I honestly think a lot of these issues are very contrived. The last time I saw someone who thought a .java or .cpp file was some magic format was... never. Honestly, if you're smart enough to write a program, these things should be blatantly obvious.

Author:  wtd [ Sat Jul 16, 2005 4:14 pm ]
Post subject: 

1of42 wrote:
While I'm starting to see what wtd means by pitfalls, I honestly think a lot of these issues are very contrived. The last time I saw someone who thought a .java or .cpp file was some magic format was... never. Honestly, if you're smart enough to write a program, these things should be blatantly obvious.


You'd think so. Don't worry, that just means you're a naive optimist. There are worse things to be.

Sit in a community college 100 level CS course sometime.

Author:  wtd [ Sat Jul 16, 2005 4:35 pm ]
Post subject: 

Delos wrote:
Good way of looking at it, I'd say. Now, since we the masses are hardly ever satisfied, would you be able to provide some examples (perhaps in Ruby) that show how using command-line has advantages over IDE? I have a funny feeling that this is a lot easier said than done...but you're creative! Laughing


Well, Ruby is a great one to use from the command-line, since there's no compilation step.

The first thing to emphasize with Ruby is that you can use the irb program to run code interactively. I mean, why create a file just to write a "Hello world" program.

code:
$ irb
irb(main):001:0> puts "Hello world"
Hello world
=> nil
irb(main):002:0>


And of course we can use this for multi-line code.

code:
irb(main):002:0> def hello
irb(main):003:1>    puts "Hello world"
irb(main):004:1> end
=> nil
irb(main):005:0> hello
Hello world
=> nil
irb(main):006:0>


Of course, at some point you'll want to create a program and run it all at once. That's simple. Just put your code in a text file with a ".rb" extension. Running it is then as simple as:

code:
$ ruby my_program.rb


At some point, too you're going to wonder: can I syntax check my file? Well, that's easily accomplished.

code:
$ ruby -c my_program.rb


And we can quickly run single lines of code without even going into irb.

code:
$ ruby -e'puts "Hello world"'
Hello world
$


We can pair this up with the "-p" option to create a very quick tool for manipulating files.

code:
$ cat > foo
hello world
foo bar baz
$ ruby -p -i.bak -e'gsub /[aeiou]/ do |vowel| vowel.upcase * 2 end' foo
$ cat foo
hEEllO wOOrld
fOOOO bAAr bAAz
$ cat foo.bak
hello world
foo bar baz
$

Author:  [Gandalf] [ Sat Jul 16, 2005 5:37 pm ]
Post subject: 

Yep, now I see why interactive interpreting is useful - its pretty much like changing your program, then compiling it to test it, but much more convenient.

Learning command line is not only useful to programming, but it also allows you to do some things that otherwise you couldn't without getting a specific program. There's a whole bunch of things that are easier to do in command line than in a GUI environment.

"IDEs aren't forever" - I've never really understood why people mixed up IDE's and programming languages. It's... I just can't imagine how you could mix them up. Don't believe people think that IDE's are programming languages? Look around these forums a bit.

Author:  Martin [ Tue Jul 19, 2005 3:44 am ]
Post subject: 

I think the problem is that Windows doesn't offer a useful shell environment, so not using an IDE can be challenging.

With linux, when coding in vim or emacs everything works out nicely because to compile it's just a few keystrokes. With Windows however, one has to switch between windows to compile code in a non-IDE environment. The IDE, although definitely an example of killing a fly with a shotgun, provides containment for everything the user is doing.

What I want is an intuitively designed IDE based around vim. One where I can do absolutely everything without taking my hands off of the keyboard, with features like code completion and a debugger. And a web-browser that uses vim commands.

:wq

Author:  McKenzie [ Wed Jul 20, 2005 2:56 pm ]
Post subject: 

My biggest problem is that at my current school board they don't allow students access to the shell because they fear that the students will abuse the privilege. Doh!

Author:  bugzpodder [ Wed Jul 20, 2005 9:10 pm ]
Post subject: 

a student will gain more from debugging right from the source code (consider some console output) rather than tracing with an IDE debugger.

Author:  rizzix [ Thu Aug 04, 2005 10:39 am ]
Post subject: 

logic problems can best be solved through tracing.

Author:  Aziz [ Sun Jul 16, 2006 11:38 pm ]
Post subject: 

I personally use an IDE . . . probably because I'm lazy, and like to avoid extra work. I started out (long ago) with DOS, and I know my way around the command prompt, but the organization of the IDE is what I like the most. I can compile, run, and check API (well, for the standard library, at least) quickly in the same program. It's small (JCreator) and I don't use the project or debugging features (if it has debugging features, never really looked in to it i always peferred debugging myself because I know what's going on). I also like the "data view" of JCreator. I can see in a little sidebar all my methods and members. I've thought about looking at text editors with syntax editing. For a good text editor for me, though, it'd have to have:

- Syntax highlighting
- Auto-indent (I wouldn't want to press space 4 times EVERY new line)
- Shortcuts to compile/run (and possibly jar!) (Pain in the ass to switch to command line everytime to compile, which I do often)

And I would prefer:

- API search (no problem to do in browser, but again, lazy)
- Data view

If anyone's got a good simple texteditor out there like this? I don't really use most of the features that JCreator offers, I mostly like the organization and at-you-fingertips options.

Author:  [Gandalf] [ Sun Jul 16, 2006 11:55 pm ]
Post subject: 

Aziz, try out Crimson Editor, it'll have most of the features you ask for. It's also far, far, far more lightweight and faster than JCreator. Probably my favourite editor, and definately my favourite editor for Java.

Author:  Aziz [ Mon Jul 17, 2006 8:33 am ]
Post subject: 

Crimson editor? I'll check it out. I downloaded jEdit last night with some plugins but I'm not to sure about it.

EDIT: Does that blow or does that blow? Code completion is onyl available in the Pro version Sad

Author:  Cervantes [ Mon Jul 17, 2006 11:46 am ]
Post subject: 

jEdit seemed to be really awesome, at first. But then I installed the Ruby plugin, and typing was laggy. But if you're doing Java, you don't need the Ruby plugin, so you're probably okay.

SciTE is another good editor, though I've lost part of my love for it, mostly due to crappy out-of-the-box settings. (Not that you buy it and it comes in a box. Download here: http://www.scintilla.org/SciTE.html)

Author:  Aziz [ Mon Jul 17, 2006 1:37 pm ]
Post subject: 

I've looked at Crimson Editor, too. I think I'm going to stick with JCreator. Probably biased but it does what I need and I'm used to it. Just a comfort thing. I suppose the real tool is being able to do it with anything. If you can do it with notepad and command line, then IMO you're good to go, but with those basic skills, I think some organization and convience is a plus, for those that can "handle" it (meaning, still realize what they're doing. Sorta like sitting at a computer with RTP and writing code, where you already know how, instead of using the stupid hsa package)

Author:  Epic Tissue [ Thu Jun 05, 2008 10:05 pm ]
Post subject:  RE:The Advantages of Eschewing IDEs for Learning

As a newbie, I have been spoilt with the fact I started programming in Eclipse! Sure, in my class we had tutorials which we wrote on paper with pen but they ended a few months ago. My recent exam went terrible as I was just not used to writing down my code on paper.

My main problem was thinking ahead. On paper, this is so necessary because you don't have room to fit things in or change stuff. With an IDE it is so simple just to launch into a problem without giving it enough thought and just chop and change parts as you see fit.

All my programming from now on will be in a textpad/notepad and command line or even on paper first.

Author:  Tony [ Thu Jun 05, 2008 10:17 pm ]
Post subject:  Re: RE:The Advantages of Eschewing IDEs for Learning

Epic Tissue @ Thu Jun 05, 2008 10:05 pm wrote:
All my programming from now on will be in a textpad/notepad and command line or even on paper first.

Good. Because otherwise people have a tendency of typing out 5000 lines of code, when 20 would have been sufficient.

Author:  r691175002 [ Thu Jun 05, 2008 10:46 pm ]
Post subject:  Re: The Advantages of Eschewing IDEs for Learning

While knowing how to use a command line compiler (and how it works) is important, I think that IDEs can have a lot of benefits when introduced early. Say what you will, but autocompletion and api doc integration are lifesavers when working with anything of complexity (Or if you are just unfamiliar). Tracking down the correct import statements for 20-30 classes and typing them out in notepad is suicide.

Whether or not one should be learning on a language with that kind of complexity is still up for debate, but I think that reducing spelling errors, time spent riffling through documentation, and figuring out the right include/import statements is something that takes a good deal of the frustration out of learning to program.

Writing a program in notepad is something everyone should try at some point, but I think it should come once you are comfortable enough with the language to be able to write something basic without spending three quarters of your time figuring out the names of the functions you are looking for.

Proper planning is something that can be done without going to extremes. I almost always throw some flowcharts on paper together or some malformed UML when I am going to code something, but writing code down on paper first is just excessive. (I suppose that if you are doing something like programming challenges its arguable, but anything real and you will be there for weeks).

Author:  apomb [ Fri Jun 06, 2008 7:54 am ]
Post subject:  Re: The Advantages of Eschewing IDEs for Learning

r691175002 @ Thu Jun 05, 2008 10:46 pm wrote:
While knowing how to use a command line compiler (and how it works) is important, I think that IDEs can have a lot of benefits when introduced early. Say what you will, but autocompletion and api doc integration are lifesavers when working with anything of complexity (Or if you are just unfamiliar). Tracking down the correct import statements for 20-30 classes and typing them out in notepad is suicide.


Most of what you're talking about here deals with concepts far beyond the initial "learning" environment that is being spoken of in the previous posts. What you're talking about does exactly what wtd's main point is stressing the importance of how NOT to learn a programming language. We are not talking about huge projects when it comes to "eschewing IDEs" we're talking about the initial learning of a programming language, understanding what the language can do.

r691175002 @ Thu Jun 05, 2008 10:46 pm wrote:

Whether or not one should be learning on a language with that kind of complexity is still up for debate, but I think that reducing spelling errors, time spent riffling through documentation, and figuring out the right include/import statements is something that takes a good deal of the frustration out of learning to program.


while learning a new language (hell, while learning anything new), mistakes are exactly where you're going to learn the most. Wink

r691175002 @ Thu Jun 05, 2008 10:46 pm wrote:
Writing a program in notepad is something everyone should try at some point, but I think it should come once you are comfortable enough with the language to be able to write something basic without spending three quarters of your time figuring out the names of the functions you are looking for.


I disagree, not entirely, but with the part about having to be comfortable with a language to be able to write something basic... maybe our definition of comfortable with a language are different, but when i write a simple program at first, i WANT it to be simple to write, i dont want to learn where the "compile" and "debug" buttons are in an IDE, i dont want to know how to create a new project with an empty template and precompiled headers. I want to be able to try out some simple functions of the language. Notepad is the perfect place for this.

r691175002 @ Thu Jun 05, 2008 10:46 pm wrote:
Proper planning is something that can be done without going to extremes. I almost always throw some flowcharts on paper together or some malformed UML when I am going to code something, but writing code down on paper first is just excessive. (I suppose that if you are doing something like programming challenges its arguable, but anything real and you will be there for weeks).


No you wont, you'll save a shitton of time getting your ideas down without distractions, when writting code on paper, its not about getting the code right, its about getting the idea cleared up in your own head, sudocode is usually what is written on paper, not actual, formatted and syntax-error-free code.

Author:  btiffin [ Fri Jun 06, 2008 8:52 am ]
Post subject:  Re: The Advantages of Eschewing IDEs for Learning

Old guy rambling
I'm a CLI fanboy. But, I'm also a huge fan of immersive programming.

polyFORTH development is interactive. Everything you type is Forth and program development is incremental. Each word can be edited into a block (using Forth words) and then tested before the next word is added to the dictionary. Extremely huge and complex applications can be built this way, and the odds are that the quality control, verification and debugging phase is quick and easy. Most of the productive time is programming new features. All polyFORTH systems have LOCATE which allows finding words in block files quickly, and we built an awesome cross reference utility that provided instant access to all words used within a word.

REBOL with it's console is close to this programming paradigm. (While the editor is built in, the actual edits require a swap to "edit headspace".) But REBOL is also highly reflective. Can't remember what the argument order is for a function? HELP and SOURCE is right there at your fingertips while developing.

C now has the uber cool Ch environment. Interactive C (and a little C++ just to sweeten the pie) with the Ch console double tasking as a *nix shell with access to the Unix paradigm of lots of small utilities that all do one thing, very well, that can be glued together with pipes and scripts.

Those are my favourites.

Forte for Java was my first serious use of an IDE (I don't count VB or VC++; while I respect a coders choice to use VB, I personally view VB as a toy and VC++ 1.0 was so much bloat that I was turned off by it, and just used the CLI tools unless forced to use the IDE to handle the overly bogus resource management). This is personal, but I usually spent more of my day playing with the Forte IDE features than programming. That slowly changed to more code than "button exploring" but I didn't feel overly productive for many months (but I'll admit to having a lot more fun than I usually expect from a working day).

Wrapping up this ramble; imho an interactive and reflective development console is #1, CLI is #2 and an IDE is a distant third. IDEs require far too many "brain space" modes for a productive development session. Every feature of an IDE requires losing the immersive nature of thinking in the programming language at hand.

But with the topic of the post being IDEs for Learning I'd have to say that an IDE at least offers hints to where to find information and can help come to grips with library (a huge part of mastering a language) and project setup. After a programmer comes to grip on other ways to find out about features, a CLI allows a lot more focus and the IDE should only be used when absolutely necessary or those rare times when work seems like too much trouble and "I don't want to work, I just want to bang on the drums all day". BooHoo

And and lastly; GNU/Linux is an awesome "IDE" and it's free.

Cheers
end ogr

Author:  apomb [ Fri Jun 06, 2008 10:10 am ]
Post subject:  Re: The Advantages of Eschewing IDEs for Learning

Quote:
And and lastly; GNU/Linux is an awesome "IDE" and it's free.


now This kind of IDE I support Wink

Author:  Tyr_God_Of_War [ Wed Feb 10, 2010 7:14 pm ]
Post subject: 

McKenzie @ Wed Jul 20, 2005 2:56 pm wrote:
My biggest problem is that at my current school board they don't allow students access to the shell because they fear that the students will abuse the privilege. Doh!

Same here, mostly. They've blocked cmd.exe, but not batch files or command.com. I got msys as part of the devkitpro package, so I can still use make and familiar *nix shell commands instead of Windows ones. It is not blocked, as it's running from my usb stick.

I also use programmer's notepad, which also came with devkitpro (Windows installer). It's nice to have it handle some of the makefile stuff automatically.

Author:  Insectoid [ Wed Feb 10, 2010 7:24 pm ]
Post subject:  RE:The Advantages of Eschewing IDEs for Learning

Posted Image, might have been reduced in size. Click Image to view fullscreen.

EDIT: Damnit, img tags didn't work


: