Ok, where do I go now? I have studied
- C, C++
- Lisp
- Prolog
- Forth
- Erlang
What programming language can help me find the core principles of the lost art, programming.
Ok, where do I go now? I have studied
What programming language can help me find the core principles of the lost art, programming.
Do some assembly language programming. There's much knowledge to be gained from it!
EDIT: apparently he (or someone else) deleted that post (where he asked if it's worthwhile to learn Forth), nevermind my remark
4 hours ago you asked if you should learn Forth.
If you can learn a new language in four hours, just learn them all ;)
You should probably take a look at some scripting languages such as perl (which is quite tightly integrated with regular expressions) or python (which has fixed indentation and is now very popular).
Using a scripting language allows you to familiarize yourself with dynamic typing but comes at the cost of performance.
It also allows you to get something working very quickly, and can assist with things like rapid prototyping.
Smalltalk for some hardcore object-orientation. C# is far from that level.
Haskell for functional programming that is purer than Lisp.
Assembly for learning low-level machine details.
PLC or Machine code; to grasp the real fundamentals of programming and Miranda or Smalltalk to grasp the ultimate in abstract programming.
Do you learn it for fun or for profit? I find Perl to be a very interesting language. It'a not only fun to use, but in fact very useful and can save a lot of time thanks to huge code repository at cpan.org
Learning a programming language won't make you a hacker. A language is a tool:a mean. Becoming a hacker is the end.
The question also depends on how do you define a 'hacker'. In the original term, or the definition i like most, a hacker is some kind of "extreme expert in a subject", so to become a hacker you must become an expert willing to push the limits of the knowledge in that subject.
Assembler (x86 or Z80), Object Pascal and C# will give you a rounded view on the development world. Learning Visual Basic may help you getting a job. Learning Perl will definitely be useful if you work with *NIX platform
You might want to the check out Dataflow programming for the fun of doing something different.
Not a programming language, but I would definitely recommend you spend some time learning about machine architecture. You gain an appreciation for how the CPU carries out instructions, and you should also learn some optimisation, such as implementing modulo with bitwise AND as it is hardware supported (on most architectures).
I think it all comes down to what you program, i.e. what level of familiarity do you need with the machine? If you are coding embedded/video/etc you will certainly need to know how the architecture runs. However if you code at a much higher level (i.e abstraction from the machine) you can argue that the compiler will optimise for you. So your milage may vary. I for one highly recommend it whatever level you program at.
As for a language, I would probably recommend Python, it's practical and interpreted, but it is debatable how it will help you with the principles of programming.
If you want low level hacking, go for assembly and learn the raw low level details. IT will go into all the details for how computers do things, and allow manipulations in lower, machine language based languages that much more possible.
If you want higher level hacking, like with networks or web programming, I would recommend either ruby or perl. Ruby is more lisp-like, and perl more c like, but both are scripting languages which have quite a lot of 'hacking' potential.
Finally, for code hacking in general, make sure you understand everything that is used by what you are working with. Learn all the underlying assumptions code, study it, and watch how other people think about the code they write.
Or look at the graphs in this article and pick one that seems to go up. It might be a lottery but it doesn't matter it will still make you a better programmer to learn some new concepts:
13 reasons why Ruby, Python and the gang will push Java to die… of old age
Learn some dynamic language, like Python or Ruby. They're imperative and have actually appeared in some answers, but there's more. Not only are they scripting languages. You can do many interesting things them, like duck-typing and monkey-patching. Try writing some test code in one of them - it will definitely be a new experience compared to static typed languages or functional languages.
Also Haskell may be interesting for you. You already investigated functional languages, but Haskell is quite distinctive anyway.
Java Script may also be interesting choice. It's a dynamic, scripting language, but has its own issues ;-) Programming with libraries like jQuery or Prototype will certainly give you some new insights.
And yes, Assembler could also be nice, if you're interested (you wrote "hacking" - then maybe even more, depending on the meaning).
Learning SQL will stretch your brain in a different direction to the languages you mention, even if it might not classify as a language by everyone's standards.
Brainfuck is a language with eight, count 'em eight instructions. It won't teach you what exactly is happening in your CISC processor all day, but it will be a big challenge to accomplish what you want to accomplish with so little. It may also teach you that using the right language for the right task is a big saver of time and headaches, because Brainfuck is the wrong language for every task, and it is a very efficient converter of time into headaches and barely-useful code. But it's fun for awhile and quite a challenge.
First, write an interpreter for it in your language of choice (by now you should have plenty of good options) and then start building yourself a library of Brainfuck code that you can use for more complicated things, like addition, multipliciation, function calls, queues...
The wiki entry may also come in handy.
If you want to learn "hacking" then you should pick one language and get indepth knoledge on it, not just learn basic syntax. Try writing programs. Read through code of other people.
I think you could really say that you know c if you understand what the programs actualy do http://www.ioccc.org/main.html'>here from first glance at the code.
By knowing lots of languages you wont be able to hack anything. You need knowledge on protocols, priciples how computers works and lots of other thing.
There is fun place http://www.hackthissite.org/'>www.hackthissite.org I recommend you to go :)
FORTH is not much used these days, sadly, but if you want to learn about economy of design and how software can be designed to be extremely simple and elegant, then it is the supreme example of that. What your average compiler or scripting language implements in millions of lines of code FORTH implements in 1000's or even 100's. More than that it WILL teach you what truly flexible and reusable code is. FORTH is less a language than a development philosophy, and it is a very good way to understand that philosophy.
Chiming in another vote for a dynamic "scripting" language like Python, Ruby or Groovy. It'll make you think about things in a new way: perhaps "why is it so easy to get stuff done in this language, and what price does this ease come with?"
If you're really interested in programming languages, maybe you should take a shot at writing a compiler for one. You could make your own language or write a compiler for one that you've already learned.
I would suggest either Python or Scheme for their ability to expose you to metaprogramming concepts. Programming is about more than just slinging together C or Perl code to get the computer from point A to point B -- if you want to be able to build flexible, general solutions to problems then you'll need to be able to think about what your program is doing at a higher level.
Scala is gaining a lot of respect lately.
Either Haskell or Scala, for they have really powerful type systems that are not found elsewhere.
Maybe the semantic web? It is not really a programming language but it causes you to rethink a lot of things.