getting back into programming, which language?(solved) which IDE?(unsolved)
Ok well here's a little about me.
I'm 15, live in new zealand and started programming at about the age of 10 or 11 in visual basics 6.0, writing some basic modules and the likes. I also covered a little bit of visual C++ around the age of twelve. and early last year I learnt a few basic python and java statements/functions for the sole pupose of being more flexible. But I have never actually learnt any language in depth, Come on I mean as a 10 year old did I really have the concentration to learn in depth VB. But this week I have been working at my dads work writing a spreadsheet consolidation module in VBA for my dad's work, this of course is the 1st program I've written in years and also the 1st that has a distinct function and purpose. And it has re-found the reason I love programming, The same reason I love gentoo. After I finish a program i can point to a line in the code, an output box or even the finished consolidation and say "see that, that right there, I made that" With gentoo i can point to the panel in gnome and say, "see that, that right there, I compiled that from source" It just makes you feel impowered I gues. All my programming experience so far has been in Windows. And regardless of which language I pick up I will be starting from scratch. But now i would like to step back into programming, And I mean real programming as in patches, applications etc. But I would like a language more of the likes of C++ or java. I would also like to be able to use similar (if not the same) programming techniques and code to be able to code on my gentoo box and our home XP PC. Fot this I was thinking of Java due to it being operating system independant, but I'm still not sure. Ideally i would like to be able to learn both but I can't multitask so one at a time for me. I have also been looking at a copy of "thinking in C++" at a local bookstore, and having flicked through the online version, was wondering if this book would be worthwhile to purchase? I just would really like to be able to give something back to the linux community while also inhancing my skills. Thanks again, Ducky. P.S. I run Gentoo as my current distro but also have ubuntu on dual boot and have had experience with abut 20+ distros (been using linux from a young age) |
Ducky, I'm sure you'll get lots of useful responses here. But along the way, consider learning lisp. It's way different from most other languages. The computing paradigm is quite unusual. It may have no immediate application, but it will make you look at computing in a completely different way. It will enhance your ability to think outside the box.
|
Quote:
Lisp? I've seen the name in some text somewhere but never heard much of it, genuinly I would prefer to stick to a well documented language hence C++, java, python etc. but I'll have a look into lisp :D thanks for the suggestion, Ducky. |
Quote:
Would you be able to comment on easyness to learn? portability across OS's and useability? any other suggestions? Thanks again, Ducky. |
Easy to learn? No way. You've got to radically change your outlook to program effectively in lisp, and that is a pretty tough challenge. But being young, you've got a big advantage there.
Lisp is very portable, since there are implementations of ANSI Comman Lisp for every platform you can think of. As for usability, that's one of the major problems with lisp. Many people (including myself) have never finished step 3 in the process of learning lisp. *The 3 step process: 1. Learn basic syntax and operations. 2. See the light of lisp's awesomeness. 3. Do something non-trivial and useful with lisp. Other than lisp, My favourite alternative language right now is Ruby. It's very lispy in nature, but still has C-like syntax. |
Quote:
here are the self-proposed goals: 1. Follow through and stick to it! 2. Apply it to a real life problem (new text editor, spreadsheet consolidator-just did this one with VBA :D, net patch etc.) 3. Be able to use similar, if not the same, techniques over multiple OS's (mainly Xp and Gentoo/linux) and of course the goals will grow and shrink dependant upon my progress and general mood :D As far as I can see, List isn't exactly the language I'm looking for. But I may still learn it anyway... when you said "You've got to radically change your outlook to program effectively in lisp" what exactly did you mean? when I say easy to learn I don't mean overnight, I mean that there are enough references around and general livelyness of the language that I can pick up resources somewhere (like my local bookshop for example :D) Any other language suggestions? Thanks again, Ducky [EDIT]and from what I understand Ruby is high level if not very high level. And is interpreted so doesn't that mean you loose some speed and power (power from it's high level, and speed from real-time interpretation)[/EDIT] |
I'm basically restating what wievens said, that lisp "will make you look at computing in a completely different way".
When it comes to references, Lisp has more than enough. Practical Common Lisp is an excellent book. Lisp took a major hit with the "AI winter", but it's growing more and more alive. We've got a pretty substantial lisper population right here at LQ. Also, try learning how to use Vim or Emacs, if you haven't already (through system administration). Steep learning curve, but a very valuable skill. I personally prefer Vim. /me points to Ruby again. Python is worth a look too, I personally like Ruby more, though. |
Quote:
Is it viable to learn two languages at once? because I am actually gaining quite alot of interest in Lisp (well common lisp) after reading the wikipedia page and going through some of its links. I did some python, but it didnt really catch my attention very well. I can do basic fault finding in python but cant really write my own code, but then again all I really need it for is fault finding anyway :D But then again i still need what I would refer to as a 'conventional' programming language :D such as C++, ruby, pythong or java. I'm thinking C++ simply because I really like the book "thinking in C++" and plus I've done some programming in it before. Looks like its Lisp AND C++ but this may make things harder.... Thanks, Ducky. |
I would start with C - and get yourself a basic Data structures and algorithms book. You can learn C as you code some of the algorithms - and get a really good fundamental base.
|
Quote:
As I understand it C++ was origionally developed as an extension to C, but then wen't off as its own language. And C++ still supports most C code if Im correct. thanks again, Ducky |
i think linux is all about (mostly if not) C and not C++.
perl is also a good scripting language. LISP for me is about AI programming. I would prefer C and hack some kernel! :) |
Quote:
Would any one care to recomend some IDE's for linux to use for C++? and one for lisp? I think ill just use either visual studio express edition for the small amount of programming I'll do in windows. Thanks again, Ducky |
Quote:
1. Learn C, then learn object oriented programming with C++ 2. Start directly with C++, after all everything that's in C is there in C++. I prefer 1, as a teaching assistant I've seen students learn to code C style structured programs using C++ specific syntax - this is pretty much useless because you miss the whole point of C++. Learning it as a separate language later helps you to concentrate on the differences. |
one vote for C++ from me too, or perhaps C and then C++. up until you get to graphics, UI's, stuff like that it's also portable if you use proper compilers. many people prefer learning programming in Java rather than in C/C++, because it enforces a certain kind of well-organized programming style and saves you from some of the gory details of memory management. this makes it good for making large, stable, maintainable code.
but i kind of prefer actually learning the gory details first, so you know what's really going on in there. what's the line about C? "all the power of assembly language ... with the comfort and convenience of assembly language?" -skullmunky |
Check my sig. All of these are fantastic languages, and in my opinion offer much more than the common C / C++ / Java family. While many of them have a specific locus of potential, they're all general-purpose. Let me describe what I think to be their strengths:
Haskell - fully functional, and it takes advantage of this by also being lazy. Data is not evaluated until it is needed. Acquaints the programmer with doing things in a purely functional way, and forces you to think mathematically. It's also strongly typed, and has a very flexible type system, so you're almost sure to have some kind of a successful program if you can get it to compile. OCaml - Functional, but also supports features of other paradigms. Use recursion when you want, and a while loop when you want. It's strongly typed, like Haskell, and the type system is flexible (though advanced features are more difficult to use until you understand functors). Also, it's object-oriented! And it can be faster than C++ code when compiled to native code, but also has byte-compilation to run on a virtual machine. Erlang - Two words: strong + multiplexed. The virtual machine has very graceful error handling, allowing you to hotswap code in real time, without bringing down the system. It's also extremely good with multi-programming, using a message-passing paradigm that prohibits shared memory. It's concurrency implementation is considered better than pthreads by most who use it. Also, it has pattern matching, and can even utilize this feature on bit strings to easily extract and deal with low-level data. Scheme - It's simple, yet highly computable. You can write your own implementation in 48 hours (do a Google search for that one). It has built-in continuation functionality, which lets you do all kinds of cool things like keep track of state or handle exceptions within functional code. More of a neat language than anything else, it will surely teach you a lot about how programs work. Perl - Great for text processing, of course. And CPAN makes sure that you'll never be lacking for a library to perform some trick or another. Object-orientation is possible, but feels tacked-on. Excellent for one-off scripts, as well as libraries that will be used by one-off scripts. Python - Fully object-oriented, and very readable. In Python, there's only one way to do it; this along with a well-thought-out method of object-orientation makes it great for programming "in the large". Some complain that it's slow, but it runs in many different environments. It's also a very transparent language, in that you can examine special variables to find out about objects. (This fills the role of the very cumbersome Java reflection features.) Ruby - If I had to pick one, this is the one I would recommend to someone wanting to get immediate satisfaction in learning a new programming language. Fully object-oriented, with a very flexible hierarchy system that allows for a replacement of multiple-inheritance. Also, flexible and rewritable syntax, along with well-known metaprogramming techniques give it an edge when writing libraries that are intuitive and flexible to use. Lastly, it has blocks, which are really helpful for writing lots of code quickly (e.g. when iterating over a collection). As I said, each has its strengths. I think Haskell is terribly useful for learning new things, Erlang would be really useful for future industry jobs (taking advantage of its multitasking capabilities and error handling), and Ruby will be helpful getting stuff done now. But why not learn them all? I'm trying to learn as many technologies as possible. If you know all the solutions people have come up with so far, you're best equipped to always pick the one that will work for you. And if you don't find it, you've got plenty of starting points and ideas from which to write your own! Oh, and as far as IDE choice goes, no matter what the language is: GNU Emacs or Vim. Why learn an editor for a single language? Learn to use the basic tools (an editor like Vim, a compiler like javac, and a build command like ant), and put them together. I can edit text amazingly fast with Vim, much more so than I could ever do with JBuilder or NetBeans or Eclipse or any other IDE. Plus I can use the same techniques not just for Java, but also for Haskell or Erlang or Scheme or OCaml or Ada or C++ or Perl or Python or Ruby or Bash or any other language I know. Then I run my build command, and my editor identifies the errors and steps through my code to find their origins. OK, so it doesn't work as well with languages like Haskell where type errors are very long and hard to (computationally) decipher, but for languages like Java and C++ it works great. (Besides, can you even find a working Haskell IDE?) My opinions are very strong on the issue, and I hate it when my instructors (used to) mandate that we use JBuilder. I feel like I'm going 20,000 MPH slower when I'm not using Vim. |
All times are GMT -5. The time now is 09:10 PM. |