Ask Slashdot: What Language Should a Former Coder Dig Into?
An anonymous reader writes "I was a consultant for nearly 20 years and I got into projects where I had to work with a huge variety of software, operating systems, hardware, programming languages, and other assorted technologies. After retiring from that I have spent the last 10 years in a completely different sector. Now I find myself wanting to really focus on coding for personal reasons. You can imagine how out-of-touch I am since I never really was more than a hack to begin with. I can learn syntax and basics in a weekend, question is, what Language should I become native to? Never liked anything 'lower-level' than C, and I don't have the funds to 'buy' my development environment....help me Slashdot, you're my only hope."
n/t
en.wikipedia.org/wiki/Brainfuck
-- Senior Software Engineer, Attorney appearance services, locallawyerapp.com.
"...help me Slashdot, you're my only hope."
You're screwed.
Don't worry, I can't think of many languages that for which you need to 'buy' a development environment.
Want to do frontend stuff? JavaScript, etc... Your dev environment is a good JS debugger in a browser.
C/C++: Do those in Linux for best ease of use (compiler and debugger come with the OS)
Java: Eclipse, or IntelliJ's open source edition?
I think even C# can be developed with a free editor...
Forgive me for sounding rude, but to give you advice about what languages to get into, without giving even a hint what you're trying to create, is ridiculous.
Languages have evolved around their purpose. No purpose, no advice.
C of course! Then start hackin' on some kernel code to test your skill ;)
Seriously though; you say you don't want to go lower then C, well C is still extremly popular and you can do pretty much anything you like with it.
It's clean, elegant. Has consistent, well thought out syntax, is easy to debug (PHP Parse error: syntax error, unexpected T_PAAMAYIM_NEKUDOTAYIM) and is secure by default.
What do you want to hack or work on? If you want to write Mac or iPhone apps, you should learn objective-c. If you want to do the web, then javascript. If you want something nice and general purpose and useful in various scenarios, Java's a good choice. If you want to dazzle yourself with interesting algorithms and programming techniques, try one of the computer science type favourites like Lisp, Scheme, ML or such.
If this is for your own, personal use, I can only recommend that you take a week or two (or a month, if you like) and try out as many new and interesting languages as you can, then decide for yourself which of them you liked best. There's literally dozens of languages people will recommend, and very few of them are going to be "wrong".
Best all-around: Python
Best for enterprise work: Java
Best for OS dev, e.g. device drivers: C
Best for system programming above OS, e.g. database internals: C++
Best for game programming: C++
Best for financial apps: C#
Best social networking startup interview: Ruby
Best for web dev: JavaScript
Best for bioinformatics: R, SAS
You should definitely learn HTML, CSS, and JavaScript. Get them down cold and then learn SQLite, a limited subset of SQL that will be available on webapps, desktop apps using AIR, native applications on iPhone and Android, etc. etc.. Here's why:
Adobe AIR -- build desktop apps using HTML/CSS/JavaScript, uses sqlite for databases. Apps work on Windows & Mac desktops.
NodeJS -- build slick event-based and asynchronous network applications on a Linux platform.
PhoneGap -- code cross-platform mobile apps!
Honestly, this stuff is all just plain too cool to ignore.
It's one of a very few languages that lets you efficiently target the hardware at a machine-cycle level while still allowing some measure of high level constructs with stl and boost containers, templates and so on. It has bindings to everything under the sun, such as operating system internals, OpenGL or DirectX, and so on. Supporters of certain other languages like to trot out little canned examples where that language can compete with the performance of C++, but they're just that: little canned examples. Look at real projects, say, modern game engines - it's a C++ world, because it can be screaming fast and interfaces well to DX and GL. It is statically typed, so it doesn't have the issues that languages like Python have in this area. Writing a compiler, for almost any other language? Chances are you'll be doing it in C++.
Then, for things that don't need that level of performance, you should pick up some scripting language, of which there are many choices. They're good for banging out little things on an ad-hoc basis where their performance isn't a major factor.
C and Java are the leading languages by a lot of measures right now. C will easily get you a job, you'll get back into it easily because you already know it, but you'll have to learn how to write code without leaking. Java is a fine language, but the number of enterprise libraries you have to learn can feel overwhelming. C# can get you a job if you want live in Microsoft world, and it's designed to be easy to pick up.
Really I'd say focus on what you want to do, then learn what language is popular in that area. Embedded? Learn C. Enterprise code? Learn Java. Games? C++. If you want to do general scripting, learn Python. If you want to write web apps, focus on Javascript, and learn a bit of Java/Python/PHP/Ruby (choose your favorite, Ruby is fun) to figure out the server side. Choose one database (oracle/MySQL/Postresql) to start out with, the knowledge will transfer to the others. Figure out what you want first, then choose a language that will support it.
"First they came for the slanderers and i said nothing."
Python is hugely versatile, you can easily port C routines into Python. It's free and open source, what more could you ask for? I haven't used it but the IBM backed open source Eclipse IntegratedDevelopmentEnvironment seems to be very popular.
I'm pretty much in the same boat as you, trying to revive a career that I once had but spent the last 15 years removed from coding. I looked around a lot and asked a bunch of people stuff. I have chosen Ruby because it looks like it's strong, gaining popularity, and has a big demand in jobs right now. It seems everybody and their brother already knows Python and the PHP framework, so you'll get a lot of 'be one of us' posts, but I recommend you figure out your goal, besides just personal hobby stuff which you can do in any language. Looking for employ-ability? You might find what I did, that Ruby, then Ruby on Rails will be a good fit.
As a consultant with 20 years of experience, there is only one language you should consider ABAP. Everything else, especially python is a toy.
Why do people who claim to have 20+ years of software development experience always seem to ask these sorts of questions? Why can't they take some initiative and try out a few modern languages for themselves, without asking which ones they should try?
Seriously, they've probably heard of anything that'll be remotely useful. There's been a lot of "buzz" around Ruby, Python and JavaScript lately. So those are the languages that people here will (and already have, based on the some of the comments) suggest trying out. It's not necessary to ask Slashdot, or Stack Overflow, or any other community about them.
Ask, "What do I want to accomplish?" Then figure out what tools are best to do so.
"To those who are overly cautious, everything is impossible. "
Heres my outdated list, still getting to grips with this list
Drivers or os layer : C, C++
Scripting : bash, python, perl
Applications : Visual Basic, Java, XML, tcltk, gtk
Web : HTML 4+5 Javascript, jsp PHP
Databases : mysql, mssql, sqlite
IDE : Eclipse, visual studio express
Others: haskell, matlab, opengl
Servers: tomcat, apache
It's easy, high-level, quick to write practical programmes in, platform-neutral and has an active community. Generally speaking, a lot of people who are handy with computers and do a bit of programming for fun or personal reasons like it.
anything 'lower-level' than C
OK, so that rules out assembly... and, em... Fortran? Pascal?
Not great as pretty much the only specifics you've given. I took it that you don't like low-level languages.
--
Perl is really easy to pick up. You don't even have to learn the syntax; just pick one, and it probably works.
You must go to the Dagobah system.
If you want something that's fun and easy to use, but don't care about performance, I recommend Python. Python can be made faster when compiled for JVM with Jython, but this only works with Python 2.x. If you like wordy languages where "everything is an object!", try Java. It sucks for desktop applications, but runs great on Android devices. If you're feeling adventurous and like headaches, try Haskell. It'll blow your mind, mannn... Functional languages like Haskell are great for building discipline and good coding practices. But if you want something like Haskell that's not as strict, try Clojure. It's a Lisp, so brace yourself for a boat load of parentheses. My personal favorites are C++, Python, R, and Ada.
C# is a robust language, and has both free versions from Microsoft for Windows (command-line SDK compiler and Visual Studio 2010 Express IDE) and open-source packages (Mono compiler/libraries and SharpDevelop IDE) that run on most platforms. There's a lot of depth to the language and it borrows many of the best ideas from functional programming languages. It also has the advantage of being a translatable skill for iOS, Android, and Windows 7 mobile apps using MonoTouch (not free).
PHP is a better choice if your main environment is Linux or OS X, if you aren't looking for strong IDE support, and you primarily want to write console apps, or web apps running under Apache. There is a Mono-based implementation of ASP.NET for non-Microsoft web servers, but it's sort of a pain.
Both of these also have strong support communities on StackOverflow and other places when you run into questions, and both are desirable job skills if your interest changes from being personal to being career-minded.
Python, Ruby, Perl and their ilk are very useful for throw-away scripts, and even small applications. But beware if you're thinking of using any dynamic language for anything beyond a small application, especially if there'll be more than one or two developers working on it at any given time.
When working on larger projects, especially involving many developers, any time saved due to the capabilities of dynamic languages will be lost debugging problems that the compiler would've caught when using Java, C#, or C++.
Some people (especially Rubyists) will claim that these kind of bugs won't happen. They will, and they can be costly. This cost increases significantly as the program size increases, and as the team size increases.
Automated unit tests aren't the answer, either. You'll soon find that 90% or more of your unit tests are merely implementing checks that the Java compiler, for example, would've taken care of automatically. Again, like the debugging problem, this isn't an effective use of time.
You and your team may see some initial time savings when switching to a dynamic language, but there's a significant long-term cost that you need to consider, too. Something that would've taken an hour in Java may only take 15 minutes in Ruby, and another 15 minutes writing unit tests. But you'll find yourself spending well over 30 minutes debugging a problem involving this code at some points, usually due to a completely unrelated change. Meanwhile, a similar issue with equivalent Java code would've been caught by the Java compiler on the developer's system, well before the code ever was committed to whatever source control system the team is using.
And like I warned earlier, there will be people who claim that such problems "won't happen in practice". Chances are that these people have only worked on some small Ruby on Rails websites alone, or maybe with one other person. Had they worked even for a week with a 300 developer team, or even with a 10 developer team, all working on the same code base, they'd soon realize that such problems happen much more frequently when using dynamic languages than when using more static languages.
If you really want to try something cutting edge but still want to stay high level with your programming, I'd strongly suggest Scratch:
http://scratch.mit.edu/
In spite of all of the junior high kids that make apps in the language, there is a strong adult community there as well... usually talking about educational applications of the language but sometimes getting into more serious programming discussions too. Some modding goes on, but if you have been out of the loop for 20 years from doing much programming, it will give you a fresh perspective in terms of newer programming paradigms and allow you to have some fun at the same time. Don't dismiss the power of this language as it has done some pretty amazing things, including emulating an operating system, doing finite state machines, and almost anything else you can imagine. Its power is more with multimedia development (rendering graphics, sprite manipulation, and audio integration into projects is like breathing air and foundational to the language), but it has pointers, arrays, and some nifty I/O controls as well. Some strong limits, but I presume by your restriction on language choices that you want a high level language.
If you want to get real retro though, I would strongly recommend that you check out the DCPU-16. This is going to be the base "computer" used for a really cool science fiction game. If you want to have automated drones frying opponents on other continents, this is an environment you might want to check out. There are some compilers already written for this "computer within a computer" and even a couple of operating systems, but it has a real retro feel for what computers were like 20 years ago. For more information, see also the 0x10^c Wiki. Full all out cyber warfare is encouraged in this game too. Viruses, trojans, social exploiits, buffer overflows, and every trick in the book you can think of is going to play a part in this game. I don't know about the legality of those actions within the game, but if you really want to get into true hacking, this is a game for you.
Wealth of books out there, it's fairly easy, and the "Express Edition" is free (and comes with a free Visual Studio). It looks good on a CV, makes you more attractive to the opposite sex, guaranteed to put hair on a billiard ball ... sorry, but you get the idea. Python's fine, but most fun is had in C#. YMMV, of course.
"The greatest lesson in life is to know that even fools are right sometimes" - Winston Churchill
You say you can learn the syntax and basics of a language in a weekend. You're probably right. What you can't learn in a weekend is the standard API that comes with each language, defining all the standard objects and methods you'll want to use. That's probably the biggest change in the last 10 years. What you want to look for in a language is one that makes it easy to do stuff. What you want to look for in an API is good, usable documentation.
Javascript, for one, is a pretty bad language with hardly any standard API (aside from the browser's DOM). Fortunately, there are free add-ons, like jQuery, that add both language features and an API.
Java was one of the first languages with a large standard API. It has nice documentation, but the language is barely better than C/C++. An ecosystem has developed around Java bytecode, however: languages like JRuby and JPython can run like Java and interface with Java code. There's also "groovy", a "modern" language built entirely around Java bytecode.
The major competing bytecode standard is .NET, from Microsoft. They offer free-with-certain-restrictions .NET compilers for C/C++, C#, Visual Basic, and more. All of them can use the .NET API which is documented on the MSDN site. I never found the documentation quite as nice as Java's; but it's usable. Again, other languages have been made to run .NET bytecode: IronRuby and IronPython.
Python and Ruby outside the bytecode versions have their own APIs. If you liked Perl and like object-oriented programming you'll love Ruby.
Finally, if you find you can't stand all this object-oriented programming, try PHP. It's used widely for making dynamic web sites, and has a nice, large API with documentation; but it rarely uses user-defined objects.
(T>t && O(n)--) == sqrt(666)
Programming isn't important. You "pay people to do that" - usually some minimal fee in the Philippines or Malaysia or India. The language to learn is chinese because this century belongs to them.
Shoes for Industry. Shoes for the Dead.
If you're doing it for personal stuff and don't have the constraints of the corporate world - Clojure. It's the cutting edge. It's way ahead of anything else out there today.
I think that is a big decision point. You may find that if you choose gui, that it will strongly affect which language you choose to go with.
Or maybe not.
Herein lies the rub. You don't say what it is you want to do. Robotics? Web stuff? My advice. Find out what it is people are successfully using to do things that are like what you want to do.
'I don't know what it's called. I just know the sound it makes, when it takes a man's life.' ~ Four Leaf Tayback
you sound like distant from open source stuff..
please get yourself a little dusty in linux/opensource related news/projects and see where the world is going.
you can use VIM for edition ALL popular programming languages. its the fastest editor ever. but its takes a while to get used to.
for programming language try to write some small programs with C++ and Qt (opensource library of everything including very cool GUI stuff).. you will like this stuff..
Pragmatic Programmers published "Seven Languages in Seven Weeks" last year. I liked the book and would recommend it for any one who wanted a taste of today's interesting languages. Over the past year, I've seen that some readers were disappointed at the language choices and some didn't like the way the author, Bruce A. Tate, selected a movie characters as shorthand descriptions for the languages' feels.
The languages: Ruby, IO, Prolog, Scala, Erlang, Clojure, and Haskell. As for development and runtime environments, these can be had and installed at no cost.
If I was asked to name the one language that is widely used, has immediate practicality, and the runtime is already installed on your computer, I'd pick javascript, which runs in the browser. Get a browser that has a console for reviewing javascript errors. The java part of its name is deceptive. It is quite different than java, but the 90s Netscape folks figured that that imprecision would help adoption. I'm not one to rue days, but that one could a candidate.
You didn't mention what languages you were familiar with from your consulting days. One question to be asked is whether you want to look at a language that is familiar but advanced the the ones you did work with or would you prefer to explore the other streams of language design. If you wish to write personal application and utilities, there is likely to be a language tied to your platform. For Windows, it's C#. For OS X, Objective-C. For Linux, you will have to pick a gui framework and its language.
If you don't work for a company that forces you to develop in language xyz then you should pick the language that fits your needs...not pick a language and then start writing away. Yes...most languages can be bent upside down and backwards to do almost anything. That's ignoring the point though.
You're completely free to choose. Most of us don't have that luxury. Study carefully what you want to do and pick the best language for that task. Do not ask a large group of tech heads what language they love best. All we are going to do is preach up and down what we use the most. I use J2EE at work and PHP at home. For old school applications that actually exist on the freaken computer they are being used on...I honestly like QT but I'd love to have another chance to try python as a long time ago I did some work with tcl/tk.
Regardless of what you pick someone is going to have a problem with your choice. In fact if you're looking forward to years of development chances are the language you choose may not be the language of choice for new projects when you finally get around to finishing it off.
Pick the right language for the job...don't pick the most popular language out there unless you're looking to be employed again in the field.
I agree with Python, and be sure to check out ActiveStates's Komodo Edit as your development environment.
The best diplomat I know is a fully activated phaser bank.
-- Scotty.
Pretty decent points.
I love using Forth to debug new hardware as well as develop embedded control systems. As you are retired and looking for a new, (fun?) native language, I'd sure give it a try.
I'd use the preferred language for the kind of project you want to work on. If you just want to be employable, learn java.
"Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
The language to learn depends on what you are interested in, language choice is very much defined by the environment you want to work in these days. If you want to write windows apps, then c#/.net, if you are interested in unix then C/C++, for mac/iPhone c/Objective-c/Cocoa, for Android Java, about the only environment where you really are free to choose is web development, where PHP is the most popular, but plenty of other people are doing real work with other languages like python and ruby.
You haven't really stated your goals, so I assume you'll want to be happy when hacking.
So I'd recommend Ruby.
It's the only language aimed to make programmers happy.
It's free, too.
Have fun!
If you have 20 years of development working with all sort of programming language, OS, and can't figure that you can
download Linux/Ubuntu with it own development tool set and Eclipse for FREE - then please don't write anything. You sound more
like a user than a developer/coder/hacker and you need tons of hand holding just to write a simple program.
So please, don't write anything cause your code will be too buggy and unmaintainable.
Mature language and environment, vast number of open source third party libraries, runs literally anywhere. (Well... except iOS ...)
XML is a known as a key material required to create SMD: Software of Mass Destruction
I've found that Qt wraps most for the craziness that is C++, it's a very nice toolkit for for "personal project" size. Don't know what the commercial market is and don't care, but for hobbyist work I find it great. Of course if you want to be part of the "cool kids" you'd probably go with Java so you can program for Android, mobile is all the rage these days but I don't feel I need it for my projects. And that's really the question, what kind of apps are you looking to make? Desktop apps? Mobile apps? Web apps? Scripting? Simulations? There's still no one language to rule them all because they all do better at certain things.
Live today, because you never know what tomorrow brings
Java+Eclipse is a pretty good suggestion.
Mono is really nice and pretty underrated. MonoDevelop is a little easier to set up, and is also free.
When you say "retiring" - do you mean in the sense that you're drawing from your IRA/SS/ or getting your income from somewhere other than a 8-6 corporate job?
And you want to program again?
Oooooookay.
GO back to 'C'. C development environments are pretty much free on all platforms - even from Microsoft. And they also have C# and VB. I would stay away from iTouch or iPad development though because you have to pay ($100) to join the Apple developer network in order to be able to put your software on your own device - unless they've changed in the last year since I looked. And they use that spawn of Satan - Objective C - sister demon to managed C++.
If I were retired, the last thing I'd want to do is program. Gardening and cooking would be it. And the interesting thing is that gardening and cooking has a shit load of science involved. In my spare time, I'm constantly teaching myself chemistry and botany. And the nice thing is that there are a shit load of free resources all over the net. I get to work with my hands, get outside, and get plenty of physical exercise moving bags of shit around - literally and figuratively. I've become a hell of a cook too. When my wife go out now, one of her comments is "it's better at home." We only go out to eat when she wants to give me a break or when the cook is awesome. There's this Thai place that I have not (yet) been able to do better.
If there are more jobs for C++, do that. If there are more for C# or Java, do that. Coding is either about money or it's masturbation (not that there's anything wrong with that...), but if you're doing it for money, then put yourself in the biggest money stream.
And sorry guys, if you're looking for money, that's probably not python, ruby, coffee, php or web language of the week. Much as I delight in all of them, there are just fewer high-paying jobs there last I looked. Feel free to prove me wrong. I'd be happier proven wrong here.
Please do not read this sig. Thank you.
Oh, that's right. You can't handle the truth.
Put your heads back in the sand. By the time you wise up, it will be too late.
Don't say you weren't warned.
javascript, jquery, ajax.
Never say never. Ah!! I did it again!
Find an awesome framework that a) follows a coding philosophy you believe in, and b) is maintained by a thriving community of good people.
The language that software is written in can change, but the quality of the code will always be based on who is writing it.
This article, Frameworks Round-Up: When To Use, How To Choose..., looks appropriate.
I will honorably mention my own favorite, Drupal.
I'm a fan of both the language and the runtime(s). Microsoft's and Mono's implementations work just fine. There's a bit better docs for Microsoft's (since they support everything) but Mono supports a surprising large amount. Plenty to work with. And it's easy to call into a C++ dll (that's actually true of everything except Java -- and even there it's reasonable to do).
Python for complete, modern scripting with good OO.
If you like to look at something minimalistic though, have a look at Lua. That language is really fascinating.
Most ACs are not even worth the keystrokes to insult them. Be generically insulted by this and ignored otherwise.
It is very satisfying for personal/hobbyist applications. Lots of libraries for graphics, sound, serial port, remote control, etc.
www.processing.org
Ruby is porn for programmers, but it's unsuitable when performance matters.
Python has a niche carved out handling mail, and is good for many other things.
Lua is a solid embedded language for games.
Java is (used to be?) the language of business software. Maybe it's C# these days?
R is fantastic for statistics mostly due to the available libraries.
Fortran is the language for physics, again due to the libraries.
PHP is kind of a watered-down, nothing-exceptional language, but it's nonetheless quite popular for web dev.
JavaScript is ubiquitous for client-side web, but it's also sometimes a good choice when you want a high-performance, security-conscious general purpose scripting language.
Kernels are written in C with few exceptions, and of course it's second only to assembly both in performance and annoyance, for related reasons.
Perl is a dead-end in my opinion, but it's not over yet; it will still be in common use for at least another decade.
Lisp gets an honorable mention for many niches.
So choose what field you want to work in, then start boning up on the language they use there.
Also: cramming the syntax in a weekend doesn't make you a programmer of that language. You can write BASIC in any language, as the saying goes. The reason all these languages exist at all is because each has some feature that enables you to construct things in a radically different way from C. Some examples:
Ruby is pervasively OO (everything is an object, everything you do is a method) and highly functional (lambdas, etc).
Take a look at this: https://en.wikipedia.org/wiki/J_(programming_language) - the whole mindset is very different from what you're used to.
Then this: http://en.literateprograms.org/Quicksort_(Haskell)
Etc.
er, I second that
Give up. If you have people what you want to do than just end your life now and save us the additional posts.
Let me attempt a clearer question: What language should I learn if I seek a full-time job as a programmer without having to leave behind my family and move to (say) Austin, Boston, or Seattle?
Any comments posted by people who only use "dynamic" (formerly known as "scripting") languages are largely irrelevant. If, on the other hand, your entensive coding experience also includes compiled languages, such as C/C++, C#, Java, Delphi then sure, I am all ears.
There are thousands of languages out there and your asking which one you should learn? Without information as to what type of programming you want to do or why you want to learn, it's a total crap shoot. If you just want to learn a language easily, python is a good starting language. If you want to do "real" programming than C/C++ is probably the best way to go. If you want to just do programming for entertainment, pick a project off sourceforge or github and use whatever language it uses. If you want a programming language that focuses on computer control Perl is always nice. If you want to design device drivers assembly is fun.
Really without a clue as to what kind of programming you want to do, your basically posting to a car enthusiast's site asking what kind of car to buy. Without a list of requirements you can get anything from a yugo to a hummer to dump truck.
/* TODO: Spawn child process, interest child in technology, have child write a new sig */
General programming for personal uses or your own company: Object Pascal with Free Pascal (and Lazarus).
http://freepascal.org/
http://lazarus.freepascal.org/
You say you want to "code for personal reasons", which I take to mean because you find programming enjoyable and want to write programs for fun.
Then I would absolutely recommend Lisp and Smalltalk. For Lisp, you can get started with Lisp In A Box and Peter Siebels' "Practical Common Lisp". For Smalltalk, try Squeak accompanied by Squeak by Example. It's all free.
No, you are probably not going to get a job writing in either of these languages, but learning them may indeed help you get a job, as they are both conceptually deep, and their influences are broader than many realize: JavaScript borrows heavily from Lisp, and Ruby and Objective C from Smalltalk. Even Python and Perl have some Lisp concepts in them. In fact it seems that every new dynamic language to come out in the last twenty years owes something to these two languages. They are like the Greek and Latin of programming languages.
By leveraging Node.js you can write web services and client-side presentation with standard html and javascript. Can't think of another language that allows you to write a server and client with the same language with as much ease. Also, the level of entry is very low, a teenager can quickly get up to speed and you don't need exotic tools or have to endure an elaborate setup, you can create all the code in a simple text editor and installing Node.js is very straightforward. Plus, Node.js has a package manager which provides a plethora of add-on modules that you can access from the commandline and in your node.js environment.
Nodejs.org
You should use the TIOBE index http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
Find an awesome framework that a) follows a coding philosophy you believe in, and b) is maintained by a thriving community of good people.
The language that software is written in can change, but the quality of the code will always be based on who is writing it.
This article, Frameworks Round-Up: When To Use, How To Choose..., looks appropriate.
I will honorably mention my own favorite, Drupal.
Don't listen to the hippies in here. They'll abuse Microsoft while at the same time sporting a boner for Apple. The irony is lost on them. Go with C# & .net. Microsoft gives the Visual Studio Express editions for free and it is the *best* IDE bar none. C# is a beautiful modern language with an easy learning curve. With Windows 8 on the horizon and the ability to write once and publish to a vast common ecology of Windows phones, tablets, desktops, laptops, servers is going to be a gold rush.
Maybe because I got into it near the end of last millennium, or because I was well enough grounded in fundamentals from assembler days, or because I was often dealing with dirty data, Perl plus the also less than perfect MySQL have enabled me to play in several unconnected spaces.
In 2012 I'd add the disclaimer as long as you don't treat CPAN too seriously. While there are indispensable gems there, way too often it either doesn't quite do what you need or alternatively, in attempting to do so, it invokes ridiculous dependency trees where quality control collapses.
Still waiting for Perl 6.
-- Our systemic servants do not good masters make.
If developing economies are your thing, chose Brasil. The beaches are better, the women are cuter. ;-)
Lua comes from there...
C: Overcomplicated, but fast, and useful for extending most other languages
Java: Reasonable, but a bit wordy. Pretty marketable. Performs quite reasonably really, though slow to exec
C++:Probably best avoided unless you have libraries in C++ you must use (in which case you could use Cython)
Objective-C: Useless, except on an iPhone
C#: Another lockin trojan horse from Microsoft. Avoid.
PHP: Awful design. Avoid.
BASIC: Those whom the gods would destroy, first they teach BASIC.
Python: Very nice language to work in. Sacrifices performance a bit in the reference implementation, but pretty fast if you use Pypy. Can be extended using C or Cython. Sometimes off-putting to people who feel that programming "should be complicated".
JavaScript: The assembly language of the web. It's a bit of a mess, but many, many web applications use it. There have been many projects attempting to translate other languages to JavaScript, to make web development less painful. One of them is Python, another is Java. I'd be surprised if there aren't others.
Perl:What a mess! It's much too kitchen-sink. For people whose problem domains aren't complicated enough to keep them entertained, so they need a messy language to make things more interesting.
Ruby:Popular among Java programmers who don't want to use anything but Java. Kinda perlish, but not quite as bad.
It's a very pleasant surprise to use Java. I'd suggest you get into using Android because it's likely to be the next major platform and a tablet because phones you hit the screen size limits pretty fast.
Seriously, if you're new to Java and used say C++, then you'll find all your familiar STL classes, a good clean/rich set of APIs and good stability.
My view is that Android is outgrowing Google, so it likely will be the dominant platform. PHP Python etc. niche. QT I like, but when Nokia dumped it, I think they stuck a nail in its coffin. C#, not going anywhere, Windows Metro, not worth the look.
iPad & Objective C, well its difficult to imagine Apple making as many different products as Android is being put on, so ultimately I think they will succumb, but it has a few good years yet on it.
An interesting language with a nice looking structure.
Similar situation here, have been a consultant working with various systems and languages for the last 15 years. I'm also not formally trained in programming but have developed some reasonably complex apps both at work and home across a variety of languages.
Simple answer, just use C# via Visual Studio Express. The IDE did everything I ever wanted it to do, and C# is a very practical and straightforward language. If like me you just want to "get the job done", then you will also be pleased with the large number of built in classes available, plus there are are plenty of resources on the net to help out.
The good thing is it will grow with you, hacks like us can get by just fine but you can also develop complex object oriented solutions, plugins, reflection etc as you develop your skills.
I'm a rebel.
http://haxe.org/
Multiplatform, statically typed, open source...outputs to desktop and mobile platforms as well.
Any thoughts on this one??
AbsCurity is really cool language developed for just the occasion when a seasoned programmer is looking for the next cool thing.
It combines the most absurd and obscure aspects of many other languages, to create that silly, useless language that so many "hardcore" programmers insist on learning to show off to their friends.
In short, it's the dvorak keyboard of languages.
In that order.
I've said it before on /. ActionScript is ECMA with a nice set of libraries, amd flashdevelop is free. It makes a great prototyping tool, can speak with networks, serial devices, and nearly everything else. But, it doesn't do everything very well. 3d libraries are painful, and SQL was all 3rd party libraries.
A lot depends on what you want to do. Processing is another great prototyping language, C# is useful in the Unity engine, and C or PIC BASIC or Arduino's Java-like are great for microcontrollers. PHP and ruby for web-aps. And the only reason I don't recommend python is that I haven't needed to use it.
You pick the language to suit the project. You don't pick a language because it's a language. You've said nothing about the types of projects you want to work on. Thus these are not the answers you're looking for. If you don't understand this, you need to.
Its a Monty Python skit writing itself..
Why yes, I want to build something
Well what is it you want to build?
Something..you know.. I need tools man
Yes, yes.. but what sort of something
Oh a right good something.. something that will last a long time and..you know.. be useful
But of course I need tools my good man.. good tools.. not those wimpy tools.. professional ones!
Great then.. here is a jack hammer and a crochet needle. Off with you now.
You should probably just give up now. Asking others to make a choice for you, rather than doing the research and deciding on your own... pathetic.
You should learn Scala.
It's object-orientated and functional. You can write your programs using either style or in a combination, which is a great way to learn and explore. Scala has an elegant syntax and local type-inference, which makes it feel like a scripting language, but still gives you the nice guarantees type-safety guarantees and allows for intelligent auto-completion. It runs on the JVM and you can interact with pre-existing Java code, so you have access to all the existing Java libraries.
As a language Scala has many advanced features not yet found in other mainstream programming languages. Features like pattern matching, case classes, implicits, abstract types, etc. These features will allow you to express your programs even more succinctly, but also help you understand how other language, such as Haskell, work.
In short, learning Scala will allow you to learn multiple language paradigms in-go, and experiment with different concepts to see what works for you.
Try a few. There are so many wonderful tools available for free nowadays.
Java is nice because it's cross-platform, and also versatile. Mature, well-developed class libraries. Netbeans IDE is a free download, and also does other languages to some extent. I've clocked Java going faster than C++ for some things, believe it or not.
Groovy - once you know Java.
Javascript - download node.js (free) and you'll be writing servers. Surprisingly easy to use.
Python is popular (I don't know it)
Perl is useful once you know it, but I tend to use Groovy instead nowadays, since anything complex can interface with Java's libraries.
Don't neglect your OS. Download VMWare Player (free) and try different distributions from http://distrowatch.com. You might decide that the OS your machine came with could be replaced with something better. :-) BTW, try for KDE instead of Gnome. There is a learning curve, but better acceleration in the long run, is what I have found.
Times have changed. Languages are essentially irrelevant; if you have a reasonable background, you can pick up whatever languages (note plural) you need.
The question a couple of years ago was "what libraries?" There's probably a library that does what you want; use whatever language it's written in. Yeah, I know, everything eventually reduces to C, but like most things, it ain't that simple.
The question now is "what frameworks?" Nowadays, you don't develop programs from scratch; you start with a framework and build on it. Using Ruby on Rails? Write in Ruby. Using Django? Write in Python. Node? Write in JavaScript. Hadoop? Write in Java.
That said, the only two languages that it's really necessary to be fluent in are C and JavaScript. C is, of course, the language that most of the rock-bottom stuff is written in. A lot of systems produce C as intermediate code, and, as a result, a lot of C-isms tend to sneak into places you wouldn't expect. Learn your pointers. JavaScript is the only language that will run inside a Web browser *; if your code touches a browser, it will use JavaScript.
* Yeah, I know; Java applets. I don't know which is more painful -- writing them or using them.
Welcome to the Turing Tarpit, where everything is possible but nothing interesting is easy.
Well, a 20 year coder with 30 years experience and he doesn't know that COBOL rules the world?
Excuse me, but please get off my Pennisetum Clandestinum, eh!
Illness has kept me away from programming for about 12 years, but I did pay a bit of attention in that time.
1) Javascript. First understand that JS is for the most part ugly--unless you are the Rubeus Hagrid ( of Harry Potter fame ) of programming and describe monsters as being "cute". That being said JS plays a role in web technologies similar to the role sh plays in a Unix environment. It sort of glues everything together. In picking up JS you will also pick up a lot of web concepts ( eg CSS, DOM ... ). Also various "widgets" and such are written in JS. If you don't yet know HTML ( which I do not count as a prgramming language ) pick up the basic concepts, especially HTML5.
2) C. Brush up on C, especially if you aren't up on staandards. There will still a lot of "K&R"isms around ten years ago. Also pick up some basic C++.
3) Ruby. You will need to learn one of the modern scripting languages Perl, Python, Ruby. Of these Ruby is the cleanest.
4) Are you planning on doing Android programming. Then you might want to learn Java first. Similarly iPad programming means Objective C.
Beyond this you will have to specify background and what you want to do.
If this is for a hobby, and you want to keep challenged, buy an FPGA development board (e.g. a Digilent Basys2 or a Papilio One) and learn a HDL. It will cost a little bit of money ($60) but you will get months of play time out of it.
Once you've programmed in 10 or so languages they are pretty generic, but the jump from programming to Hardware Designing is a complete mindfsck, but one you grok it it is very satisfying. Everything happening in parallel in hard real time....
Build your own 'soft' CPUs, invent the next big thing!
Just pick any language and work through Project Euler
You will think harder and learn a lot more than learning another language
Chinese
Python it is.
Or, mebe you could read through some of my replies to the comments and get an idea and post a USEFUL comment. Or not. You probably would answer the wrong question.
I would suggest you follow your own advice. Read your comments. They mostly consist of you sniping at people. Or complaining about Slashdot itself, while, without a trace of irony, saying that you have only just created an account and have therefore contributed nothing to the community of which you make demands. And, more than once, demanding that people do more work for you, to make up for your own unwillingness to invest time in answering your own question.
You are disrespectful. You are graceless. You are a horse's ass. Perhaps not the answer you sought, but the one you need.
Okay, I almost feel like you are some evil pointy-haired-boss pretending to be an engineer so that you can try to speak as "one of us" and convince us to commoditize ourselves out of existence. Like somehow you think that programming is hard only because engineers are stupid and haven't bothered to make it easy, and you think that posing as a coder on Slashdot and whining about it will get us off our asses.
I'll skip the long drawn-out explanation for how ridiculous you are and just state that what you are asking for is not possible, the Turing Machine isn't just some paradigm that we can toss out the window because you don't like it, and that the industry is already churning out too many retards that only know how to do their job by screwing together buzzword frameworks without you helping us along.
Want to learn A Programming Language? Learn APL. Nothing else approaches it in parallelism or will be as useful when we all have thousands/millions of processors in the box.
Epitaph: At last! Root access!
If you want to learn a cool language while having assured fun, learn Haskell. It is purely functional and very compact.
At the risk of sounding old school: PERL. I've learned PHP, Python, JAVA, ActionScript (yeah, I know), some Ruby, and a little C++... but, over the last decade, I find myself continually circling back to PERL. Why? Because it's stable, ported to almost every OS known to man, you'll find it installed on pretty much every webserver and linux installation by default. It just works, and its virtually omnipresent. You don't have to use it any particular way, either... object oriented, non-OO, whatever you feel like. I use it for home network stuff, sysadmin stuff, CGI, web apps, even applications. It's an excellent glue language that brings everyone together. It's simple to learn and deploy. The only thing I would suggest, is to start learning PERL6... not only is the language re-written from top to bottom, the internals are completely nextgen. It'll be using the Parrot compiler, which will allow you to mix languages inside PERL... so, not only can you write PERL however you'd like, you can throw in bits of PHP, Python, and Ruby if that floats your boat, too. That's my 2cents, and I'm sure some people will think it backwards somehow, but hey... in 15 years of coding and design, I have yet to find something it can't handle, or a platform it won't run on.
ActionScript, though? That language is a mess. It's got at least three different versions, all with radically different syntaxes, that seem to coexist somehow. (Kind of. ) The language is buggy - its one of the only languages I know, where I don't trust the actual compiler. I have had to work around bugs that simply shouldn't exist. I have had movies just sit there and not move no matter what I tell them to do, and other times where the movies just won't play, no matter how many times I tell it. It uses up a lot of overhead, and smartphones are fleeing from it. It was great in the beginning for a lot of graphic/multimedia type stuff... but HTML5 is rapidly picking up the slack. In another 10 years, it'll be a dead language like FORTRAN.
Fortran, anyone? Or is this the wrong crowd?
Never liked anything 'lower-level' than C
you say you were a programmer 20+ years ago? the only decent options back then were ASM, and the concept of OO wasn't even born yet - you left the industry because you were not capable of being in it in the first place. times have changed; all the old skool boys have stuck with C - specifically focusing on embedded environments (C, C++, objective-C) and the newbies (kids) are playing with managed code these days. CPU's are 1000x faster, RAM is 100x more available - you will have a better chance starting from scratch than trying to recuperate what you knew before.
It isn't just programming languages that have changed in the years since you changed career 10 years ago (or 30 if we start from when you first cut your programming teeth).
Back then, the concept of unit testing your code was unheard of outside of financial institutions (though I bet they didn't call it that back then), and the phrase "design patterns" would have made you think more of knitting than programming. (The actual practices described by the common design patterns have been around for ages, but the names given to them are relatively new and have quickly become part of developer jargon. You need to know them).
In short, whatever language you learn, try to also get a handle on some of the most current programming practices and the terminology around them.
(Spudley Strikes Again!)
The Turing computing model has two major flaws: in addition to being inherently sequential, timing is not an inherent part of the model. IOW, there is no way to predict whether two operations are sequential or concurrent. The computer industry is facing a major problem known as the parallel programming crisis. Guess what? The Turing computing model is not the solution. In fact, it is the problem.
But who am I kidding? Turing is worshiped as a God in the computer science community. The industry will not learn its lesson until it hits them where it hurts the most, their pockets. Nobody messes with Moore's law and writes home to brag about it. Just saying.
Why? For Fun! I recently returned to perl as my primary development language and the perl community has been just friggin' awesome!),
So while everyone else argues about technical benefits ( and I could do the same about Perl), I'll instead go with the experience of learning with highly professional but humorous folks. There is a very good reason why the original open sourced community driven language keeps on evolving and attracting new adherents. It is fun to hang around these guys and expand your brain.
From the second post by the OP, listing languages (s)he has used:
"BASIC, C, Pascal, Ada, COBOL, Perl, CGI, vbscript/asp, scripting (*ux shells mostly), VB, most recently PHP"
CGI is not a language, and ASP wasn't invented until Jan of 2002...
Also, why are ASP and VBscript together, but VB is not?
From the orig post: never did anything lower than C
What about Ada, COBOL, and Pascal?
I'm not one to flame, but sometimes somebody needs to be slapped around with a large trout.... I gotta call BS on this one.
First to declare interest, I'm a 61 year old Perl person, although, in my mid 40s I did an MSc project using Java and still 'do' a little Java.
That said, one of the things I love about the open source landscape is being able to try new languages without spending [even the modest amounts, in the 'old' days for the fairly awesome Borland compilers] cash. A big public thank-you to all open source interpreter and compiler maintainers.
There seems to be a specific objective in the OP, so I would say short list according to the needs of the project. I love Perl but probably wouldn't use it for avionics, for example. I hate Java but would probably use it to 'finish' something that was already 85% Java, ugly to introduce another language into the architecture. I wouldn't use COBOL to write a small footprint real-time operating system. I think you see what I mean.
Enjoy!
On y va, qui mal y pense!
I think you are missing some info: what do you want to do? Depending on what you want to develop, a different language may fit your needs:
On the other hand, a language without a good library is a condemned language, unless it is focused for some sort of special, reduced purpose, where such library is simply a small set of functions written to do a specific task.
If you are evaluating "speed", then you should have a look to this site:
http://shootout.alioth.debian.org
Cheers
Because no one expects...
Well, how about you make it constructive rather than just stating that you hate something along with cynicism towards the community your are trying to reach. What is your alternative to the Turing Machine that will work with existing Von Neuman architecture and bypasses the "Parallel Programming Crisis"?
Assuming his blogspot post isn't just a honeypot troll, his view of engineering seems to be that you shouldn't have to know anything to do it. Just plug lego together - in other words his idea is that some else - who? - should do all the hard stuff so he can assemble it like toy bricks and get the credit. Let's call the someone else a programmer. He's worse than a PHB, he's - drumroll - an MBA.
From scarped cliff or quarried stone she cries "A thousand types are gone, I care for nothing, no not one."
Well, how about you make it constructive rather than just stating that you hate something along with cynicism towards the community your are trying to reach.
Been there, done that. It doesn't work. I get much better results by being antagonistic and irreverent.
What is your alternative to the Turing Machine that will work with existing Von Neuman architecture and bypasses the "Parallel Programming Crisis"?
It's called COSA and it's inherently parallel and reactive. Current processors would have to be redesigned to handle COSA at the instruction level. Sorry. The baby boomers got you into this mess in the second half of the last century. Problem is, they are still in charge. Maybe it's time for them to gracefully retire and let a new generation have a turn at the wheel.
Math. OK. That's a bit terse. Computational linguistics? Spend some time browsing terms like "lambda" on C2 Wiki or even plain old Wikipedia. Everybody on Slashdot has their pet language, and they are all special. When you get down to it, it's all math with different notation.
The real answer might be, "think about what's important to you, and then pick one and study it. Then pick another one because the first choice is always the throw-away version".
Agree. Programmers tend to exaggerate the flaws of languages, but any grown up will note that Javascript runs on everything big enough to have a browser. Like all languages you can write badly or well. Even if you don't go all the way with Douglas Crawford (I don't), it's easy enough to avoid really bad things - and its maths handling is excellent for the intended application space. So the DOM sucks? Plenty of protocols suck, but we don't blame the language that has to work with them.
From scarped cliff or quarried stone she cries "A thousand types are gone, I care for nothing, no not one."
brainphysicalexpressionofsexualattraction
From scarped cliff or quarried stone she cries "A thousand types are gone, I care for nothing, no not one."
Someone who CONs the management and inSULTs the workforce (that's consultants to Government and the public sector though).
From scarped cliff or quarried stone she cries "A thousand types are gone, I care for nothing, no not one."
The article author wants to program without investing time up front in research. From my experience of consultants that puts him in my class D: wants us to do all the work so he can present the results back to us and get paid for it.
From scarped cliff or quarried stone she cries "A thousand types are gone, I care for nothing, no not one."
Maybe it's time for them to gracefully retire and let a new generation have a turn at reinventing the wheel.
There, Fixed That For You
If my comment didn't sound as good in your head as it did in mine, then I guess we all know who's to blame
If I was going to pick up a hobby language, that could get me a job if I wanted it, I'd pick up Objective-C. Writing apps for the iDevice line is fun, you can share your creations with most of your friends, have a built in distribution platform, and there is no shortage of jobs in the space. This also applies to Java/Android, obviously, but I've personally found Objective-C more rewarding. YMMV.
The right language depends what you want to do.
I have used a number of languages and have to say I love Perl the most. It has always had much more power, flexibility, speed and breadth than say Python or Ruby (no not asking for flames thanks), is a real language unlike PHP, and has much extensibility to allow you to develop your own style. There is a reason why it has been the glue of the Internet and I enjoyed for example developing quickly responding websites (with fcgi and catalyst on apache) or for short utility programs. There is a joke about line noise though I have never seen it to really be true. The point is to reduce the amount of work and lines of code while maximizing creativity. Many people prefer python or ruby for that. And a text editor like XEmacs (free) works fine. Some javascript maybe. Some sql. But this assumes web development on linux / LAMP stack and we don't even know what you want to do.
If you want to be marketable then perhaps saying you can do python or java or is useful. If you had to you could pick up PHP quickly. I doubt ruby would get you far marketing-wise though it could be fun. But the important thing is to decide what you want to make first and then choose a technology, and be willing to learn new ones. I would say try to stay away from proprietary technologies, like C# or other things that only work on Windows for example.
Apex for Salesforce is an interesting Java derivative but really locked in and takes a lot of learning including quirks and online development. If you pick an open source environment like eclipse or emacs and an open source language with a vibrant community and easy to reach libraries (Perl's CPAN for example) and run the server on your own mac or pc then you can stay in control. Even if you are aiming at the mobile market there are many ways you can do things, some of which can save you time so you can focus on the parts that are most important. So the answer is that you don't have to do anything lower than C these days. If you can find some areas where you feel comfortable and maintain an interest in learning you can become strong in any space.
You must be a baby boomer. LOL.
Just as a counterweight against the by now almost automatic reply of "Python".
Firstly, don't get me wrong - I have nothing against python; after all, I don't know the language, and judging from the popularity, it seems obvious that it is not bad.
So why recommend Java? First a bit of background: I am, like you, experienced - 25 years and counting, on anything with more than 8 bits. I have always preferred C, or if need be, C++, but I have had to come to terms with Java (and especially Java EE), with its many, and sometimes absurd, buzzwords. I don't like it, but I have come to respect the toolset that it represents.
So, my recommendation is to learn Java EE 6: Get the latest Glassfish and NetBeans (both free) and study the free material that is available - and believe me, it will keep you occupied for a while. I have never come across anything as full of words and concepts that I didn't immediately understand, but it is worthwhile, in the end, as you will end up mastering the world of enterprise aplications.
Java in itself, I have to say, is a little bit pointless; yes, you can create applications that are somewhat portable on a good day, but they have to run in a JVM which eat a huge chunk of memory and takes quite a while to load. Java EE is the point of Java, so go all the way.
Try Go. It's like Python and C had a child, that turned out to be both strikingly beautiful and a great athlete. I've been writing Python professionally for a long time, and I think there's a good chance Go will completely displace Python for new development in 5 years time.
You want to focus on coding for untold reasons, but these reasons are important to give you advices.
If you need to develop a standalone application, python is (by far) the easiest way. It is fast to learn, powerful.
If your need is to come back on developer market, you need to learn web development. If you have been a developer a long time ago, php and mysql will be a piece of cake, but you may have more difficulties with javascript/html5/css3. Learning jquery and bootstrap is the best way to web development. You should definitively avoid learning any framework: they become obsolete very very fast.
Learning how to use github will also be a good idea.
Remark: everything is free. If you have notions of unix, Linux is a very good environment for developers. But, if all you know is windows, you have many things more important than linux to learn first. Stick with windows.
fwiw, I'm having fun learning Clojure.
fyi: Programming Clojure (2nd edition) by Stuart Halloway and Aaron Bedra
I have looked at many programming languages and continue to do so every other week. There is so much out there, but most of it is not particulary tailored to meet the needs of recreational programming in the way that Basic was in the 80s and Turbo Pascal was in the 90s. The trouble is: you really only understand the weaknesses and strengths of a language once you wrote different kinds of programms or a very large one. It takes too much time to do it with every language you encounter - at least for somebody who still has a family and a job.
I think the OP just wants to hear about interesting choices instead of the established industry sandards.
Some things I found interesting lately: Vala, Hollywood or PureBasic, Lisping (iPad Scheme interpreter), Free Pascal or oo2c, Google Go, C++11
...and learn your metaphors good!
It's all about what do you want to achieve with our programs. First choose project that you're really interested in and after choose right tools for it. Simple.
No sane person will start programming dynamic website with C and no sane person will do embedded programming with PHP. These all are potatoes and oranges, but no sane person will love their morning potato juice and having their steak with cream-garlic-oranges and red wine sauce.
Who really cares? Just fire up new process and be happy. After you've burnt out your 16 fancy cores and need a second node for processing, your fantsy pantsy threads are just about useless. Fire up and manage those 100 x boxes and you'll regret that you ever thought about those damned threads!
Just my five cents about going horizontal...
First, you need to learn OOP and OOD. If you are a "professional", that is mandatory. C doesn't have this unless you used X/Widows ... XWidgetCreate()/XWidgetDestroy() where you pass in the structs.
The idea that you'd have to pay for a work environment is only valid with Microsoft tools. Almost all the other languages are free. The version you can download and the version of that the richest billionaire use are identical - unless they rewrote it.
Where I live, Ruby programmers get a huge premium over other languages. Ruby is a nice language, I hear. Anyway, if you want to make a living Ruby is not a bad choice.
Java / JavaEE - enterprise-only stuff. You will probably never write an entire program yourself.
Php - if you want to join the millions of community college hacks and have in infrastructure that seems to be full of Zero-day back doors.
Python - fantastic learning language for 1st timers. Also very capable. More and more popular with sys admins. It is replacing Perl many places. Python doesn't let you write ugly code.
Perl - er .... Modern Perl. It is harder to learn and has a reputation for write-once code. Modern Perl is vastly different, but you can still create write-once code. With your C background, perl will feel familiar. Perl is still extremely fast and there are huge libraries of unencumbered code you can leverage.
C++ - Only for desktop apps and very few server apps. This is where a commercial IDE will be helpful, just watch out for Microsoft's. It is fantastic, but it also encourages platform specific code. I group C# into this .... I've never written it or studied it much, but C# seems to be C++ with memory cleanup - halfway Java and C++ - the good halves - according to reports.
iOS uses the Apple ObjectiveC language. I think the IDE has a trivial cost.
Android - Java (for now) and uses the free Eclipse IDE. The worst thing about Android dev is this big, slow, memory hungry IDE. You'll need 12G of RAM, an i7 CPU and SSD drives to make it work. It sucks on anything less - I know.
There are hundreds of other languages - like R. All niche, but if you are good, you can earn a great living - perhaps Haskell?
To see good examples of common solutions to programming problems in hundreds of languages, check out RosettaCode.org. You can see the code written by experts there in their respective languages.
Your COSA thing seems to be describing exactly what every DSP language has already been doing since the dawn of time (take a look at SynthEdit, Max/MSP, SynthMaker for some very visual examples).
DSP languages are fantastic for parallel execution tasks such as... well... DSP. They absolutely suck at procedural tasks or complex flow control.
Slashdot social media options: AIM, ICQ, Yahoo, Jabber and Mobile Text. Why no MySpace?
If this is purely for personal interest, learn something interesting and learn a functional language. Haskell and/or Scala would by my choices.
Don't learn any of this imperative crap that the others are suggesting, how boring ;-)
Go is quite nice. The compiler is very fast and strict, catching many errors. It really helps to write bullet proof code.
The language itself has many high level constructs, functional programming, multithreading is built in, objects, etc.
The runtime catches lots of errors, too, array bounds checking, for example. It's a well thought out language that is designed to help you avoid common mistakes. Yet it also has dynamic types and other powerful features. It's pretty neat.
Right. You want to draw a mind-map and then let the computer make some sense out of it using some sort of infinite monkey approach and then intelligently picking the best outcome.
Well, the good news is that something like that can be done, at least eventually. You'll figure the bad news when you manage to make something cool with it.
Most poster here seem to agree that Javascript is a very useful and versatile language to know. It runs on more devices than any other language, and as others have mentioned it can be considered the assembly language of the web. The major downside is that it's not a great language, too many quirks, odd syntax, no real API, and other problems. One way to get around the language issues is to compile another language into javascript. GWT allow you to write programs in Java and compile them into robust Javascript that will work exactly the same across all browsers. So you get the advantages of Java, with it's more mature language with it's robust development and debug tools, with the run's in browser advantages of Javascript. I find it very useful for my own web-based personal projects.
C++ and Qt4, of course
in addition to being inherently sequential, timing is not an inherent part of the model
"inherently sequential" solves the timing problem. There are no concurrent operations in a Turing machine, and hence, no concurrency problem. The Turing model wasn't intended nor is it used to model parallel computing. Nor was it intended to be a viable computational language. It is merely a theoretical approach for putting bounds on how long it takes programs to do tasks.
The computer industry is facing a major problem known as the parallel programming crisis.
Nonsense. The problems of parallel computing have been solved in a number of ways and those ways work just fine.
The real difference between a Turing machine and a real computing machine is memory. A Turing machine has access to an infinite amount of memory. That's the way it breaks in the real world.
But who am I kidding?
Yourself. You demonstrate a profound ignorance of what the Turing computational model is used for. It's not intended in itself to be a model of parallel computing. There are variations that are, and which work successfully as such.
A second way that you're deluding yourself is in dismissing Turing machines on the basis of typical crackpot arguments. The Turing machine isn't "worshipped" in the CS community because Turing is a God, but because it is, to our knowledge, computationally equivalent (aside from the infinite memory issue) to any classical physics computing machine that we can construct in the real world. Come up with a better machine first.
You want to focus on coding for personal reasons. what does that mean ? ;)
For personal reasons you want as a hobby to make robots with your kid ? have a look at lego mindstorms
For personal reasons you have to let your previous venture and come back on the scene as a consultant ?
If so, to do what ?
Actually, I think there is in fact one language that you would benefit from having a serious look at whichever is your actual goal, and that would be LISP, unless you are in a hurry to be very effective at something specific in which case you would have to be more precise about it
Cheers and welcome back
If you want to automate and mess about inside a *nix system, python and shell are really the best. Perl is nice, but you need much more asbestos when trying to get help with it.
Want to do things for the 'web'? Javascript, or Ruby on Rails.
Mobile programming? If you like straight jackets and anal lube go with objective C and iOS. If you want more freedom to innovate, Java/Android.
If you want to write Desktop games, it's going to be SDL for linux (C, C++) or the equivalent in Windows land (used to be Visual Studio, havne't touched it in years).
Join the Slashcott! Feb 10 thru Feb 17!
We accept him, we accept him, as one of us, one of us.
And you must be an idiot. If you can revile someone merely for being born in a particular span of time, then there is something wrong with you. After all, if you too had been born during that time, then you'd be painted with that same brush.
Look. Java sucks for many reasons. Python is for beginners, COBOL sucks for many reasons, and you already know C which is a very powerful language, and there have been additions to it.
C is used to create a lot of powerful software that actually works and doesn't depend on a bunch of other crap installed and running in memory in order to function.
You had your answer all along.
Whenever I attended some recruiter-sponsored user group lecture, most of jobs they offer are for java and mobile.
I glanced through the aspects of the COSA model. It's not a computational model and hence, doesn't in any way replace a Turing machine. This can be simply illustrated by asking the question, "How much time and units of computing does it take to perform a certain task?" The Turing machine is designed to give a clear answer while that sort of detail is hidden from the programmer in COSA. Hence, you do not have an alternative to the Turing machine.
How would a any CS or Turing model handle a decision dilemma?
Two illogical or unique conditions/environments requiring a specific 0 or 1 outcome for further evolution, progress, processing ....
Survival requires a decision, but none of the directions, paths to be taken are true or false. The decision result is 50/50 life/death, still a human makes the best possible decision for the desired outcome life/death. A decision dilemma is more telling, than a sense of humor, for sentience.
HOLDIT, what the hell am I talking about ... ForGetIt.
Unaccountable leaders are masters, and unrepresented people are slaves. How do US and EU fare?
Facebook uses in house compiler that translates their PHP code to highly optimized C++, which is then compiled to native code. I would not call that PHP.
As the island of our knowledge grows, so does the shore of our ignorance.
android is the future
First you should learn the language that seems the most fun to you as that will make you use it more. But here is my brief experience with languages over last 30 years.
C/C++: low level, complex syntax, compiler based, good for really anything but development can be a bit lengthy. Very mature IDEs and good debugging.
java: very popular in corporate world, in my opinion best suited for large teams or server side programming, lots of libraries, can be overwhelming. Easy to profile and debug. IDEs are very mature. Android development.
ASM: only if you are hand optimizing some non-portable code or for fun or for some embedded cases, not very useful otherwise given efficiency of C compilers.
python: nice scripting language I prefer using for writing tools and deployment scripts, got burned a few times when team grew big. Can be hard to debug, IDEs not mature yet.
ruby: has a large faithful community.
PHP: another scripting language that can be hard to scale on large sites, great way to get started in web development. Easier than writing CGIs. Can be a pain to debug. Good IDEs cost money, free IDEs not as mature as they should be. Large community. Good compilers not available (Facebook is not releasing theirs as far as I know), so runs interpreted.
Javascript: Good to web based UI using jQuery or extJS. nodejs fun for prototyping server side. VMs are getting better at running it, but not as good as a compiled language on the server side.
perl: good for string processing, can produce extremely difficult code to read and support. Rabid fanbase that has been poached by ruby and python lately.
C#: similar to java (some people feel it is better some do not), Visual Studio is a nice IDE.
ObjectiveC: iPhone development.
This is from my experience, YMMV. It all depends on what you want to do. Pick the right language for the job and you should be fine.
If I was to recommend languages to you: python for scripting and java for everything else... again, this is my opinion, others have presented compelling cases for their choices.
Really... no love for Lisp?
you're in more trouble than you think!!
Python is probably the most general language with fast results. Lots of users and activity.
Ruby has ended up largely as a language for web page developers. Probably because Python was already around, and Rails was one of the early packages. It can also be used as a general purpose language, but Unicode is more of a bother (than Python3, anyway).
C it an old stand-by with lots of libraries and highly efficient. It's handling of Unicode is atrocious.
Javascript is nice in the web area, but doesn't work well with local files.
D is an excellent language that is also efficient. But it doesn't have many libraries, so you need to get them as foreign functions.
Smalltalk doesn't seem to be going anywhere, but also it isn't losing steam rapidly. It suffers more than it benefits from being such an all-encompassing environment, and it's not the most efficient. But in some ways it's the most flexible easy language that's full-featured. (If that interests you, check out the Squeak and Croquet dialects.)
I really can't recommend touching anything that is connected to Oracle. They appear to be trying to copyright APIs, which, if they are successful, means that they will own (literally, not just 0wn) anything you write in one of their tools. Like MySQL, or Java. As a result I would stick to languages that have a user agreement that clearly states that you own what you write, even if you use the libraries or tools that they have made publicly available. And even then I wouldn't touch anything that Oracle has bought an interest in.
I think we've pushed this "anyone can grow up to be president" thing too far.
As a matter of fact, I, too, am a boomer. I am just realistic enough to recognize that my generation shot computing in the foot, big time. Although this is becoming painfully apparent as we enter the age of massive parallelism, a particularly costly consequence of our Turing-worshiping madness has been around from the beginning. It's called the software reliability and productivity crisis.
Java is a dead end of misery and endless forests of entangled API- you will spend most of your time trying to figure how to do things instead of doing them. Ruby is one of those 'almost' languages where it's similar to other stuff but just enough different to really mess with your head which makes transferring learned concepts to other languages a challenge. I find Javascript to be hugely expressive in a wild west kind of way and in the way dev environments- every modern browser has a built-in debugger. C# (Mono) is dreamy for forcing you to behave. C++ is still the standard. For a lark you could learn Go, Processing or Lua.
Most of all- have fun.
It's integrated into a lot of software (NodeBox, Blender, lot's of IT-type software). Further, I was at SXSW and got a distinctly Python-vibe among the start-ups (I was expecting nothing but Ruby and node.js and "cloud"). Lot's of resources, huge community. I think there are some concerns about it being bad at parallel/concurrent stuff (not something I can speak about with any authority).
I think either Cobol or RPG II are the future.
Building GUIs? Scientific applications? Games? Each language has pros/cons depending on the end usage.
I am going to restate my view, which has been crystallized by some of the really funny previous posts.
I have been studying human motor development and it is causing me to see computing as a technical activity that is defined and controlled by the input devices and output devices that are connected to the computer.
For instance, the input devices for working with visual information are awkward, clumsy, technically limited gadgets. Extracting meaningful information from from any webcam or photosensor or gel plate scan or optical scan of a book page is a lot of ticky tacky programming that is extremely context sensitive.
Never the less, there are all kinds of interesting developments as a trickle of problems and input analysis challenges are solved.
In any case, no matter what the input device and no matter what the specific conversion goal... it is all programming.
So I would say, don't worry about the programming language too much; after you identify an input device you want to work with then the programming language and development operating system will fall into place.
The best recent improvement of my own personal programming situation is moving to a completely silent Atom based computer with all the memory I can stuff into it and a discipline of sticking with stable well documented free programming languages.
And finally one more unscientific postscript: Have you noticed that the Internet does not yet support any direct, portable database yet at all? On that level of programming abstraction, the whole Internet is still stuck on the same plane as a 1983 vintage dial up BBS.
I would start by picking up a used dual core PC for a hundred or so dollars and installing a Linux system on it.
With Linux, you can download compilers, editors, programmers workbenches, etc.
I started with renewing my C expertise, now I am on to C++ with QT, and will be beginning C#. I do not find Java attracting me to it.
I bet you could even find COBOL, Pascal, Fortran, and everything else.
I too am retired (71) and enjoying life at the keyboard. Also my wife loves that I am not in her space.
If interested, reply to this post and I will follow up.
Leslie Satenstein Montreal Quebec Canada
Learn the fundamentals of CS.
Then pick the language that is right for the task.
in title
as you said, for personal reasons as there aren't all that many jobs in it yet. But you'll learn functional programming which is pretty neat.
There are no concurrent operations in a Turing machine, and hence, no concurrency problem
Theory for the Speed of Light
Concurrent computing on a single core PC is nothing but a sequential machine running fast enough to make you think it is computing in parallel.
Hypothesis: the laws of the universe are upheld by a sequential computer that is running at amazing speed but not infinite speed. In order for the activity in the universe to stay predictable, the speed of light is bounded.
I feel better already.
Know your pads. One time pad: good for cryptography. Two timing pad: where to take your mistress.
It's called COSA and it's inherently parallel and reactive. Current processors would have to be redesigned to handle COSA at the instruction level.
Also, we're going to need to evolve much bigger hands to be able to do the kind of gigantic hand-waving you seem to do in such a carefree manner...
Downmodding is the refuge of the weak. Don't downmod, make a better argument!
I glanced through the aspects of the COSA model. It's not a computational model and hence, doesn't in any way replace a Turing machine. This can be simply illustrated by asking the question, "How much time and units of computing does it take to perform a certain task?" The Turing machine is designed to give a clear answer while that sort of detail is hidden from the programmer in COSA. Hence, you do not have an alternative to the Turing machine.
Indeed. All he's done is recapitulate LabVIEW.
Downmodding is the refuge of the weak. Don't downmod, make a better argument!
..either Indian or Chinese.
You might want to look at Jython (Python, but with options of binding to Java classes and datatypes and interface with it), if you want to start half-way. Its a single big jar file. Options of embedding, lets say, the Java JDBC into Jython, and write directly into Oracle or DB2 databases (with just 5 lines of code)... portable (runs on anything with Java: AIX, Windows... but not raspberry Pi (no Jython port for Java ME )). Jython is being used in some of the Tivoli products.
IMHO it all depends on your "target market" for the next 1, 3, 5 or more years.
If your customers seem to require solutions centered on thin clients (browser powered), JavaScript + HTML5 or Ruby or PHP could be a god starting point. Java plus GWT (from Google) could also be a very interesting starting point)
If your clients love Android, Java plus the Android environment must be your focus.
If your clients are in love with the stuff from Cupertino, you must focus on ObjectiveC.
Maybe your customers want something more in line with a fat client. If they have Windows, C# is a good starting point. If they have Linux, C++ is a logical choice. If they use macs, ObjectiveC is the proper language.
Although VisualStudio for Windows and ObjectiveC for IOS cost a lot, there are free excellent software development environments for the majority of the mentioned platforms/environments (Android, C++, GWT, Java, PHP, Ruby).
It's called the software reliability and productivity crisis.
Nonsense. Turing machines are merely a computational model (which incidentally is more than equivalent to any real world, classical computer, as opposed to quantum computers, which has computational advantages). The software reliability and productivity "crisis" is based on an economic dynamic (which has nothing to do with the theory of computation) which is a case of incentives for software providers to provide less reliability and functionality to users of a lot of software.
I'm a bit abrasive here, but you are confusing an economics problem to a fundamental computer science problem. I don't think it is. I don't the above "crisis" will change until we have far more capable. not necessarily human programmers out there. Your COSA idea doesn't create that.
Hypothesis: the laws of the universe are upheld by a sequential computer that is running at amazing speed but not infinite speed. In order for the activity in the universe to stay predictable, the speed of light is bounded.
An amazingly slow machine works just as well.
get some working code and start hacking. better yet, get a hobby
I am not a baby boomer, not even in my own country which did not synchronize its baby boom with USA.
But I am old enough, to realize that younger generation always believe that they can do things better, which is perfectly fine and the way it should be I think.
And sometimes they will improve on the wheel, other times they just end up with a square with rounded corners still believing it must be an improvement as it wasn't invented by neck beards.
I guess what I am saying is: Respect the giant on whose shoulders you are standing, but if it does not get you where you want to go, then by all means climb down and start from scratch. But then do so on your own merits, no need to discredit the tech/ideas that you are obsoleting.
If my comment didn't sound as good in your head as it did in mine, then I guess we all know who's to blame
I agree. My computer is a linear bounded automaton.
I also get the impression that we have the choice of doing nothing. Then we wouldn't need to redesign our CPUs or evolve bigger hands.
Also, I don't think you got my point in the grandparent. The Turing machine is sequential and hence, doesn't have concurrency or timing issues. Operations also come in a particular order. There is no uncertainty. It is wholly deterministic. If you know the code and know the input, then you know exactly how the machine will operate at every step.
And since it is computationally equivalent (or superior) to any classical machine with finite parallelism, that's good enough. It's a tool to study computational complexity, not a model for how modern processors work. Those incidentally work in very different ways from a Turing machine.
How would a any CS or Turing model handle a decision dilemma?
It'd make a decision. Dilemma resolved. If you need randomness in the decision (say to counter an adversary's strategy), then there are stochastic versions of the Turing model that suffice.
FORTH is the choice for all Jedi.
Learning the syntax and basics of that will perhaps take you a bit longer than a weekend.
Birds are not dinosaur descendants;birds are dinosaurs, for all useful meanings of "birds", "are" and "dinosaurs"
I'm surprised with all the flurry of languages mentioned that no one mentioned Pascal. It's still alive and well. I've been using Pascal since 1987 (UCSD Pascal back then) but later switched over to Turbo Pascal. I now use Free Pascal which is open-source, cross-platform, and you do have the option of terminal mode or GUI programs if you use Lazarus with it. I also use Virtual Pascal (Win32 and OS/2). Both Free and Virtual Pascal can do OO programming. Let's not forget GNU Pascal also. While Pascal is not the "flavor du jour" of programming languages, it's served me well for all of these years. There's not too much I can't do with it -- granted, I don't write device drivers or such -- but it's a good structured language that might be of use to the OP for "personal use".
There's also the "side effect" of my learning how to read C from using Pascal. While I'm no C programmer, I can look at C or C++ source code and have a good general idea of what's going on.
Anyhow, just thought I'd toss those thoughts into the ring.
Modern applications are personalized, secure and available anywhere on any device at any time. Look into developing a REST based web service using Java (my lang of choice) or your favorite flavor of C. Next put an HTML5 face on it using Javascript/AJAX to call your REST API. Check out backbone Javascript framework and Apache Cordova/PhoneGap. So I can't recommend just 1 language, but if you go with HTML5/JS/Java you can build anything you want on any device and deploy it however you choose. For an Eclipse dist go with SpringSource and check out what Craig Walls is doing...
Thanks, I was wondering how it would be handled. Dilemma resolved. No weight to the repercussion/outcome of death or serious harm.
I would make a decision quickly as well, but the repercussion/outcome .... A human, I suspect will be less predictable than any artificial intelligence, it could be close. Also, I suspect the AI outcome would be better on a per-test, but the AI species maybe would go extinct prior to the other dinosaurs/humans.
Resolving dilemmas is easy, obtaining a preferred outcome with the resolution is a gamble, I think?
Unaccountable leaders are masters, and unrepresented people are slaves. How do US and EU fare?