As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I currently program mainly in C/C++ and Java. I have done little bits of other languages here and there, but I am not proficient in them. I typically just use eclipse for java, and Microsoft Visual Studio for C/C++. I have read a lot of people swear by emacs, yet I haven't really ever used it. I tried it once, but it seemed way more complicated than the editors I was already using, and I gave up on it. However, I am wondering if maybe I should give it another chance, but I want to know if you think it is worth me putting the time in to learn how to use it? Are the benefits that great? And will it still most be useful in maybe 4 or 5 years? I read it has been around already for over 20 or so years.
Also, I am not really skilled at all in unix or Linux or any of that. Would you recommend I learn it? And if so, why?
Emacs is highly worth learning. While I don't like slideshare, let me link you to what Matz had to say about this topic.
I think that it is definitely worth to spend time to Emacs. That is, if you have the time. The first 2 months you do not feel really in control, though every little bit you learn feels like a victory. Now, after 6 months, I am amazed with the possibilities and wrote so many little tweaks. Before, I never did any programming and now I wrote a small little package for Emacs. Life is great.
EDIT in 2019: I do not recommdend it anymore. There's a steep learning curve, and with the great editors available these days it is not going to be worth your time investment. Especially since the amount of people who will be able to add new functionalities to Emacs will decrease (Emacs-Lisp is a shitty language)
Knowing either Vim or Emacs is definitely a good thing. Even when I'm doing C# development in VS, I always keep an Emacs window handy for quick text transformations, log viewing, IDL editing, Git merges, etc.
If your programming experience is only with the C family of languages, the exposure to Emacs Lisp will certainly do you some good!
It depends what your goal is. If your goal is to become a better programmer, then no - emacs won't help you. However if your goal is to be more comfortable working with files and doing development on unix systems particularly on the command line - then yes, emacs is a fine editor to learn. Likewise for vi or vim.
Emacs will surely be around for a long time to come, just like many other editors on the unix command line. It won't go stale, so don't worry about that.
I would definitely recommend you learn a command line editor of some variety, since being comfortable on the CLI (command line interface) is a very useful skill for real world developers. Whenever I interview a candidate for a developer position, CLI comfort is a must-have.
Related
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I wish to learn Lisp as I am going towards Artificial Intelligence (AI). Can somebody share some good book names of tutorials which covers good amount of Lisp details?
Just googling it, but didn't find anything good which covers the language in detail.
Also, which software is required for programming (like for .NET languages we usually use Visual Studio to do programming)?
Thanks in advance.
Thank you all for the helpful responses... :)
Paradigms of AI
Really good for learning Lisp, but especially if you're aiming for AI. It covers a lot of the techniques that you'll need and shows how to use them.
In your googling did you see Practical Common Lisp? It's a great starting point.
One caveat about PCL is that it starts out with the most obsolete kinds of constructs, explaining how to create global variables, using property-lists, etc., I was surprised by how it began with all this really gnarly old stuff that had nothing to do with what I wanted to learn. Eventually it does get around to very lucid explanations of macros and multimethods and stuff, so it does get better if you stick with it. But if you want to get into Lisp but skip the nasty old cruft, my advice is go straight to learning Clojure, which is a very recent Lisp built with the idea of supporting modern programmers' needs.
Introductory resources for Clojure:
1) Rich Hickey's presentation "Clojure for Java Programmers", which gives a good overall idea of what Clojure is about.
2) Stuart Halloway's Programming Clojure, which is a good introduction to the language.
3) Fogus and Houser's Joy of Clojure covers more advanced material you'd otherwise have to find by rummaging through a lot of books on Common Lisp and Scheme and sorting out which bits are relevant and which are outdated.
As for software Lisp people (including those using Clojure) tend to use Emacs a lot. However, you can use vi (there's a paren-matching option that comes in handy) and Eclipse has plugins you can use (Cusp for Common Lisp, Counterclockwise for Clojure).
ANSI Common Lisp, Paul Graham is the bible of Lisp, my opinion.
LispWorks is the most commonly used (GUI) IDE (like Visual Studio) to
develop, test, debug, compile your Lisp projects. It is a commercial
product but for individual usage is for free on Linux, Windows and
even Mac OS X. I prefer to use Emacs (nox version) & CLisp on my
Ubuntu OS. I love my console. 8-)
Any text editor will do the job of editing source code--even Windows' Notepad. However, given that Lisp code will have nested parentheses, you will likely want an editor which will help you match open and close parentheses, such as Notepad++ (or if you're a little more Unix-centric, emacs or vim).
I've never gotten more serious about Lisp programming to go beyond using GNU clisp or the Lisp interpreter in emacs for small projects, so I can't really recommend anything more sophisticated. However, this list of Lisp References looks like a good starting point for potential reading material.
The classic text for AI & Lisp is the Paradigms of Artificial Intelligence Programming (PAIP).
On Lisp is a pretty good text as well.
I use emacs + Slime for my Common Lisp work; it's not the most modern, but works quite well. I have never yet felt the need for a commercial Lisp IDE. Others may disagree.
And if you are interested in learning how to program games with Lisp, you can also check Land of Lisp
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 9 years ago.
I need to learn Perl for an academic research I am doing. I need to go through a lot of older perl scripts and run them, tweak some perl scripts from open source tools for my use and of course make some of my own.
I have a tight schedule so I needed to be comfortable with a perl code pretty quickly. I have previous coding experience from C and Java but not with any scripting languages as such. I found Perl to be quite difficult to get used to from the beginner tutorials I have gone across. I am more comfortable learning through screencasts rather than go through books when I start learning languages. Of course one always needs a good reference book or user manual but videos are more intuitive when learning something first especially because I can see the expert actually code stuff and explain it at the same time.
I've heard from other friends that there are great screencasts for other scripting languages like Ruby and Python. I was wondering is there any really good quality screencast for Perl out there. So, I ask for help from people who have good experience with Perl to point me to a good resource.
I don't think that screencasts are really that valuable in terms of learning fast and deep. There are some nice Perl 6 screencasts, but for Perl 5 I still think perldoc is the best thing you can find. Comprehensive and readable.
Also, Perl is a pretty big language, similar to natural languages in many cases: easy to get comfortable with simple things, and requiring more experience to get around the difficult/sophisticated syntax/concepts. Mastering Perl takes time, especially when you'll need to work with old Perl (it's pretty different to Modern Perl, written today).
This may not work for everyone,but personally, I find taking on small projects (or inventing my own) to be the only sufficient way of learning a language quickly.
One trick I use for high-speed, is to take stuff I've already written in other languages, and port it to the new one. I moved from Rexx to Perl this way a few years ago, then from Perl to Python recently, and now I'm moving from Python to Ruby in the same way. So, you could try taking something you've written in C, and porting it to Perl.
Frankly, being given a big pile of old code to comb through is a huge gift. You could try plugging the classes and functions into new short projects, to see how they behave. You could also try writing unit tests exercising them, to give you both familiarity with coding in Perl, and familiarity with the functionality of the codebase you're familiarizing yourself with.
One of the best ways of learning is:
Learn Perl debugger. If you are familiar with gdb, it should be a breeze
Run a few of those older scripts, and try to grok them, by looking up sercheable references on perldoc web site, tweaking/messing with them, and importantly, debugging them.
Whenever you run into some piece that you just don't get (especially feature/functionality that's not easily searcheable for like a keyword/built in function would be), come to SO with that specific thing and you'll get fairly reliably comprehensive answers.
Go through a decent set of books. O'Reilly are the best for Perl (Camel would be my recommendation) - they are actuially VERY quick/easy to skim through to get the main points of someone who already has C and Java experience. Couple that with the main perldoc tutorials (data structures, modules and OOP)
For doing new work of your own, get a hold of Perl Cookbook in addition to the above.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
What's the best operating system to study in order to write your own x86 operating system from scratch?
I think Minix was created for pretty much that exact purpose.
Have fun!
It might be difficult to comprehend the source for an entire OS all at once. The tutorials over at osdev.org have a few "bare bones" code samples to get you started.
I just wrote my version of x86 kernel from scratch! (for my OS class project) and that was experience I couldn't probably describe. You can find valuable resources at above link.
For my OS class in college we used the Nachos OS Project and implemented that. I did the C++ version, however I think there is also a Java port of this as well. I remember it being very interesting and learning a great deal, even though it was a lot of work.
It all depends on how you want your Operating System to function, if you want a microkernel you should probably study Minix 3, or if you want a monolithic kernel the current linux kernel is a good place to start from (HINT: look in arch/x86/boot, there is some very interesting code in there).
However I personally think that you should read through the Intel and AMD manuals, and then do a bit of reading on the osdev.org forums and wiki. They have plenty of code to study, and are generally helpful towards newbies.
Honestly, you should probably not start with an x86 architecture, or even operating systems but maybe something like an 8-bit starter kit, like a basic Fox11 development kit. In college, I wrote my first (and only) OS in Assembly for an M68HC11 processor (the one in the kit).
If you really want to build your own OS from scratch, you've got a long road ahead of you.
I think best way to read many different operating system sources, definitely osdev barebone tutorials, whitepapers on OS research and documentation on your target hardware.
I personally would recommend looking at l4-ka pistachio kernel, written in pretty darn good C++. There are also multiple smaller projects definitely worth checking out, like jimix or pedigree.
Best to stick around osdev forums and wiki - there is a lot of information there already answered - see http://forum.osdev.org and http://wiki.osdev.org
I read this article a while back. You might find it interesting. This guy wrote MINIX back in the day for the very purpose of teaching OS concepts. So it would probably be a good simple OS to study. http://www.cs.vu.nl/~ast/brown/
However, as Martin and Cory mentioned, it's a big chunk to chew.
There is not much point in studying obsolete OS's which is pretty much all current OS's as they tend to have long lives. Have a look at some fresh ideas (although based on tried and true) like Singularity
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
As an artist and musician, I often want to sit down and just let the code roll like a piece of free-form poetry, but I've found that doesn't work as well as when I have a set goal in mind. I've been experimenting lately with setting up tiny, fun goals for myself, not unlike how an artist would sketch a quick still-life, but I wonder...
What do others do when they want to code for fun, without the bondage of an already-committed project?
Design work, I find, flows much easier than just coding. I find that coding is often more of just implementation of a good design; I really like to just sit down with a pad of paper and a pen (and likely a bottle of wine) and work out an interesting design.
Project Euler is where I'm having fun at now. I can go at my own pace and work on the problems that interest me. Also, work in any language I choose.
Write documentation when coding doesn't come easy - coding will quickly seem much more appealing!
Going for a walk outside.
I tend to map my idea or build a structure in a MindMapping tool like MindMeister. And it's great for a team because it can be edited in real time by multiple persons!
I like to pick up a new language and learn how to express ideas in it. This usually has the benefit of showing me what I like and don't like about the languages I currently use. I usually pick some little tool project I've been wanting to do. Using the new language angle get's me motivated
My most recent 'new language' is Scala, in this case it will likely become a langue I use.
I like writing on whiteboards. Great for db diagrams, task lists, feature lists, (other lists,) random ideas, notes, etc. (db diagrams being the biggie for me)
Python is great for just getting things going on an idea and having the language (usually) behave like you would expect.
While it may have its drawbacks, it sounds like a great fit for what you are describing.
So to answer your question, the Python Challenge is entertaining and often gets me thinking about little things that would be fun to code, probably because it exposes you to different types of problems.
I like to code.
I like to find something interesting, code it and then see it works.
It does not have to be a project per see, it's good enough if it does something, like use Google api to get picasa albums, change song in iTunes or get details of current iTunes song, automate downloading of document from web site that is behind login and requires cookies and all that stuff, data parser in python, simple app on Mac, core data application, google codejam problems, topcoder.com problems ...
I like to learn new features of some language or some new language/technology/patterns/tool :-)
Usually I will work in Photoshop for a while. Get creative and try to come up with a new design that's not constrained by any code. Maybe even find something inspiring on the web for some new design ideas... then try to implement the design in code. That's the fun and challenging bit.
Use the REPL.
You figure out broadly the sort of thing you need to do - what APIs you need to use, what data structures you need to handle - and then prod them interactively until they start making sense. A ton of languages I use now have REPLs: Ruby, Python, Scala, Java (BeanShell, or JRuby/Jython etc.), C# ('csharp'), PHP (Facebook have made a REPL for it), Smalltalk (GNU gst) and, obviously, LISP/Scheme.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
I'm working on a toolkit (sort of a live-CD Lisp-in-a-Box) for people new to Common Lisp, and I want to make sure it is broadly satisfying. What is attractive to you about Lisp? What do/did/would you need to get you started and keep you interested?
What I have so far: SBCL 10.22, Emacs 22.3, SLIME, and LTK bundled together and configured on a Linux live-CD that boots entirely to RAM.
I've now released the result of this; it is available at the Thnake website.
I would include at least cl-ppcre, clx, Hunchentoot, and Weblocks.
I guess that you would have to negotiate with the respective authors, but including "On Lisp", "Practical Common Lisp", and "Successful Lisp" would be a great asset for the CD.
What would be really nice is to use stumpwm as the window manager on your live CD.
Emacs almost prevented me from learning Common Lisp. It took a lot of effort to slog through it. Emacs and SLIME are too much for a beginner and will never be broadly satisfying to beginners. If I want to learn a new programming language, I want everything else to stay out of my way while I learn it. The task of learning Lisp is hard enough without added technicalities and complications of setting up an environment. Isolate the variable.
Set up SBCL with rlwrap or an equivalent. rlwrap supports very basic paren matching and history searching and can even do tab-completion. Not as fancy as SLIME but a beginner doesn't need SLIME. A beginner needs to be able to run hello-world without spending an hour fighting Emacs. Provide Emacs/SLIME as an option but don't require it.
My suggestion is to include an HTTP server like Hunchentoot and a popular web framework. I suspect that most people that want to learn Lisp these days do so because of reading Paul Graham, and wanting to mimic his success at building Viaweb, so being able to easily create and modify powerful web applications would be a strong selling point for your live CD.
Include Emacs, of course, but you might want to have something gentler.
The Lisp environment I found easiest to slip into was Macintosh Common Lisp, with the FRED editor (Fred Resembles Emacs Deliberately). Digitool didn't successfully make it into the current era of Macs, but they open-sourced a lot of their stuff as they folded. Try www.clozure.com or search for "openmcl" on Google.
There was a project to get the Fred environment running on Openmcl, but I don't know the status offhand (I haven't done anything with Lisp in a long time, and haven't been paying attention on the mailing lists).
So, my recommendations:
Ask Paul Graham if you can include "On Lisp". Since he's giving away a download for free, the odds are good that he'll give permission. (His other excellent Lisp book, "ANSI Common Lisp", is apparently still selling, so it's unlikely he'll give you permission there.)
At least check out the MCL stuff to see if there's anything you can find to make it easier. Emacs is a great Lisp environment, but it's a bit intimidating for the beginner.
I haven't looked at the SBCL documentation lately. Is it fairly readable and beginner-friendly? Perhaps somebody could write up some quick instructions on how to get going and how to debug. Emphasize mouse use at first, even if using Emacs.
What would really get me interested in Common Lisp is a modern set of libraries at the level of .net or Java, as well as some really good documentation that isn't gnarly.
In terms of software, a nice gui editor along the lines of notepad++ or jEdit would be good. Emacs/vi & text-based editors always seems quaint and antiquated for serious development.
Reading Paul Graham makes me want to learn Common Lisp. But if I actually sit down to try learning it, the urge subsides.
Everything in clbuild (http://common-lisp.net/project/clbuild) should be a good candidate to be included. Incidentally, all packages in your list except Emacs are also managed by clbuild. I think it'd be good if the collection of projects in clbuild could gather some momentum towards standard-common-lisp-library-hood.
This does:
http://www.joelonsoftware.com/articles/ThePerilsofJavaSchools.html
Of course I'd also like to learn more Python 3.0, erlang, and F#. I believe that functional languages (not to say that Python is a functional language) provide just a different perspective. The more perspective you have the better solutions you can architect. It is all about using the right tools for the job too, but if you don't at least have familiarity with something you might never think to solve a problem with a particular tool. I guess it goes back to the old saying that to a carpenter everything looks like a nail. I do not want to be hammering C# into everything when there are better solutions available. Also, times change and fads do with them.
Emacs does have a bit of a learning curve, but it is great for serious development -- no pesky mouse-driven gui bling in the way of the (text-based) code.
Out-of-the-box CUA-mode is enabled these days (so C-x, C-c, C-v works "standard"), and there is a menu with file-operations like save, etc, so it shouldn't that hard of a slog, if it's all pre-packaged. But pre-configuring the .emacs file to ensure that CUA mode is enabled, SLIME doesn't have to be configured by the user etc. is a must -- plus perhpas more documentation within for the user for .emacs configs - links to EmacsWiki, etc. (hrm, if this is on a CD, it's unlikely that the user would be configuring it themselves, isn't it....)
I have some interest in learning Lisp, but I don't 'like' most of the resources available. How about extending this project to the creation of some sort of a "community" responsible for providing tutorials or something, in order to make Common Lisp more popular and easier to learn? Bad/weird/useless idea?
I think the idea of including tutorials is an excellent one.
In addition to the ones already stated, there is both the easiest book for newbies on lisp (A Gentle Introduction to Symbolic Computation) and several excellent websites hiding out there on the web that people should know about. Here they are:
A Gentle Introdiction to Symbolic Computation
Learning Lisp
Casting Spels
Learning Lisp Fast
As far as I undertand you are doing Thnake.
Thank you for greate live distro!
I tried it couple of days before and found it rather impressive and interesting.
There are couple of things it obviously lacks, such as LTK since you have already included Common Lisp and Tcl/Tk. And since there is gtk, you can include bindings and documentation for CL and Python.
Also there is a need in Lisp Hyperspec, and preconfiguaration of Slime to use it. (Same for documentation for Python and Tcl) May be it would be better to add emacs-w3m for fast and convenient documentation browsing.
There's always Practical Common Lisp, a book on Common Lisp which is readable in its entirety online. There's also a packaging of Emacs with a CL implementation meant for using along with the book.
You should definitely add Vim too, configured with the RainbowParenthsis plugin.
rlwrap for SBCL is a good idea, and so is (require :sb-aclrepl).
Weblocks should come with cl-prevalence and maybe Elephant/BDB, too.