Computer Science Canada

Languages a programmer should know

Author:  mirhagk [ Tue Aug 07, 2012 12:49 pm ]
Post subject:  Languages a programmer should know

Any programmer worth his salt can code in multiple languages. I believe that if a boss comes up to a programmer and tells him/her that the next project will be written in a new fangled language, that it should only take the developer a couple days to get familiar enough in the language to do most development, and by the end of the project, should have only spend a week or so on learning the concepts, and should now be a capable programmer in the language. In order to accomplish this, knowledge of a vast array of languages is required, as new languages very rarely break lots of new ground, and offer similar syntax and structure to older languages. Here I will include a list of the languages I think you should be familiar with. This means that you should be able to read and comprehend any decently complicated programs, and could write a program in it, even if it requires using some docs, googling around, or other references. I have broken the languages down into categories, and what you should do is decide for each category whether you will be using it professionally/consistently, whether it is just something you want to be prepared for (so if your boss suddenly talks about mobile apps, you're not going to have to buy a bunch of textbooks to read over the weekend), or whether it is something you will never touch, and are not at all interested in. If you will use it for sure, learn all the languages in the list, if you want to be prepared, but probably won't use it, learn just one of them (one of the major ones, which are bolded), otherwise you don't need to learn any of them (but it can still be fun to).

(Note I have also included frameworks here, because learning a framework to me is no different than learning a new language, and knowledge of frameworks is very important as well)

General Purpose Languages:
C++
Java
C#

Python

General Purpose Specialty Languages: (kinda an oxymoron, but basically languages that are well suited to specific applications, but are general purpose)
Ruby
Haskell
Perl
Lisp

Data/Systems Programming:
SQL
Prolog
Batch
Bash
PowerShell
Regular Expressions

Web-based programming:
PHP
ASP.NET
C#
Javascript
JQuery
HTML
CSS

Video games Programming:
C++
OpenGL
DirectX
C#
XNA

Fun Languages:
BrainF***
Haskell
Prolog
Lisp
Regular expressions

Firmware/Low Level:
HLA [high level assembly] (good for intro to assembly, but unfortunately not popular)
MASM
NASM
C

Mobile Programming:
Java
C#
Objective-C (sorry to cause you this pain, but don't worry android is getting ever more popular, hopefully you won't ever have to use this evil language)
HTML (I beg of you right now, and I want you all to promise me, that if you ever make a non-resource intensive app (basically anything but a game or video/photo editing) to use HTML(or C#, which has mono) and compile for all OS's. Cross compatibility is more important than speed for most apps)
Windows Phone SDK
Cocoa
Android Phone SDK
Silverlight

This list is certainly not exhaustive, and if you have any suggestions please feel free to comment (I can't add them to the list, but maybe a mod can if we get a lot of them). If you suggest a language, please provide an actual reason, and remember that it's always better to know too many languages than not enough (ie don't come on here and say "SQL is teh worzt languag EVER!!1!11 Lern Turing wich is 4 proz!!!11" (yes I do know they aren't even close to the same thing, that's my point)).

Author:  Ultrahex [ Tue Aug 07, 2012 3:14 pm ]
Post subject:  Re: Languages a programmer should know

*shakes head* I hope you realize this post was completely pointless, and I am still confused why you posted this.

Being a programmer has nothing to do with languages, and the fact that some employers actually care which language you have written in before still mind boggles me.

In-fact the kind of companies that do this thing I often say straight up I am not willing to work for them due to the environment of how languages and platforms are seen.

I know zero of the languages you posted; cause I have not lived long enough to learn any of those languages sufficiently. Then again my understanding of "knowing" a language is very different, and I have even written compilers for some of the listed languages.

Author:  Tony [ Tue Aug 07, 2012 3:58 pm ]
Post subject:  Re: Languages a programmer should know

English, which happens to be the most common language used to write docs/specs. Ability to communicate well with others, knowledgable of the technology one is taking on, is arguably paramount.

Ultrahex @ Tue Aug 07, 2012 3:14 pm wrote:
Then again my understanding of "knowing" a language is very different, and I have even written compilers for some of the listed languages.

http://compsci.ca/blog/you-dont-know-that-programming-language/

Author:  mirhagk [ Tue Aug 07, 2012 5:21 pm ]
Post subject:  RE:Languages a programmer should know

@Ultrahex

I'm sorry I used the word know, I meant to try to use familiar instead of know (I guess I missed a few spots). I don't think you should completely know everything language under the sun, that's obviously useless, and I tried to make sure I didn't convey that.

What I think is:
mirhagk wrote:
you should be able to read and comprehend any decently complicated programs, and could write a program in it, even if it requires using some docs, googling around, or other references.


I agree Tony, that it is vitally important to be able to communicate, by experimenting with various languages you can pick up new languages quickly.

@Ultrahex how does it boggle your mind that employers care about reducing the amount of training on a specific language? Most companies accept a range of similar languages, but never programming in their language before is most definitely a downside to them, as it will take time for you to learn it.

It's like applying to burger king with years of mcdonalds experience. Yes of course 99% of the skills are transferable, but it'd still be better to get someone who has experience working at burger king (assuming all else is equal)

Author:  Tony [ Tue Aug 07, 2012 6:12 pm ]
Post subject:  Re: RE:Languages a programmer should know

mirhagk @ Tue Aug 07, 2012 5:21 pm wrote:
@Ultrahex how does it boggle your mind that employers care about reducing the amount of training on a specific language? ...

It's like applying to burger king with years of mcdonalds experience. Yes of course 99% of the skills are transferable, but it'd still be better to get someone who has experience working at burger king (assuming all else is equal)


Following that example, someone with years of (relevant) experience is likely a much more valuable employee that someone with perhaps a few months of... more relevant experience. I suppose we could argue the exchange rate of McD vs. BurgerKing experience, as valued by BurgerKing... but brining it back to the real world of software development:

The problem is that employers might be passing up on exceptionally good candidates, because their resume missed to include some buzzword that HR wanted to see. (e.g. HR is looking for someone with "Ruby on Rails" framework experience. Candidate A has years of Ruby experience and is an excellent Software Engineer. Candidate B is a fresh college grad with much less experience, but one school project happened to use RoR, so hey... it's on a resume. It's easy for us to tell who would be a better match, but it's a difficult problem if the resumes are filtered through a set of regular expressions.)

Author:  mirhagk [ Tue Aug 07, 2012 6:35 pm ]
Post subject:  RE:Languages a programmer should know

Well yes Tony, obviously if the resumes are simply filtered through for a particular language that is not a good way to hire. However asking for experience in a particular language is not at all unreasonable.

When I wrote my last resume I included a list of languages I knew, I was familiar with, and I had experience with. I made sure to define each list, including how long it'd likely take me to get fully up to date on the language, and including a note that this would be done on my own time. I also mentioned that I was able to learn new languages at a very quick pace, and if they mentioned a language I could likely learn it before HR even got a chance to put me on the payroll.

They told me the languages/frameworks they used (SQL, C#, .NET MVC, extJS, Javascript, HTML). I then relearned the languages I needed to, and learnt the only one I had no experience with before I even started working (extJS). I hope this means something to them, and I can get a reference from them attesting to the fact that I completely learnt the languages/frameworks on my own time before I even started.

I think what your most upset about Tony is people scanning resumes for keywords rather than reading them, which I agree is stupid decision.

Author:  Tony [ Tue Aug 07, 2012 7:31 pm ]
Post subject:  Re: RE:Languages a programmer should know

mirhagk @ Tue Aug 07, 2012 6:35 pm wrote:
I think what your most upset about Tony is people scanning resumes for keywords rather than reading them, which I agree is stupid decision.

Almost. It's not just about "reading", but "reading by a technical person". Your typical HR will have training in handling intra-office drama and harassment lawsuits, not in what separates good developers from the rest. A list of buzzwords is often an approximation used.

It's somewhat different if you are dealing with technical recruiters instead, as they are more specialized... but they also have a different set of incentives.

Author:  mirhagk [ Tue Aug 07, 2012 8:56 pm ]
Post subject:  RE:Languages a programmer should know

I've just probably been lucky but most of the companies I've been around have the managers look over the resumes, and the managers are ex-developers themselves, or at least people who have enough experience with technology to know what's going on. HR is usually only involved in the finances.

But despite whether or not companies are smart enough to hire good workers rather than resumes that much a regular expression, the point still stands that learning more languages helps you learn computer science to the fullest.

Author:  2goto1 [ Wed Aug 08, 2012 8:10 pm ]
Post subject:  Re: RE:Languages a programmer should know

mirhagk @ Tue Aug 07, 2012 8:56 pm wrote:
the point still stands that learning more languages helps you learn computer science to the fullest.


Your original point seemed to be that knowing many languages would make programmers super duper productive programmers on the job, so technically the point that "still stands" is a new point. Tossing memory aside, and sticking to the original topic of being a good productive programmer in a professional development role, I agree with others that knowing many languages is an attribute that ranks less than many other attributes, including communication skills, logic, deduction and analytic skills, and numerous soft skills, and expertise at becoming an expert. In fact, many of those other attributes are important personally as well, and they can all be developed.

In my own anecdotal experience I find the most well rounded technology people seem to gravitate towards consulting companies. I found those who have only worked in pure development roles tended to have higher levels of programming language / framework expertise, but lower levels of other attributes.

Either way the minimum bar to succeed in a role that is heavily development based is obviously to be able to program and problem solve somewhat efficiently. So those other attributes are not critical to a software development career, but they can significantly open up more career opportunities.

Author:  mirhagk [ Wed Aug 08, 2012 10:07 pm ]
Post subject:  RE:Languages a programmer should know

I don't know if you read my post, but I basically said that every programmer should know multiple languages, and be able to pick up new languages, frameworks and ideas at the drop of a hat. I didn't ever attest that learning multiple languages will make you a super duper programmer, that was an assumption made by many here.

My original point, that a programmer should know (know of, as in have some experience with it, as in made non-trivial programs, learnt some of the concepts of what makes it unique) multiple languages, and be able to learn new ones at the drop of a hat still stands, and I believe you all agree on that.

Author:  2goto1 [ Wed Aug 08, 2012 11:00 pm ]
Post subject:  RE:Languages a programmer should know

Your original post was a very different point. You entitled your thread "languages a programmer should know", and included a very specific list of languages. No need for further clarifications / retractions.

An abstract communication tip for you - people are more likely to positively contribute to your discussions rather than criticize or close themselves off when the communication process that you establish has an air of fairness and equity. For example, your list included no justifications for any of the languages chosen, yet you required participants to provide "actual reasons" for any of their additions.

Author:  mirhagk [ Wed Aug 08, 2012 11:20 pm ]
Post subject:  RE:Languages a programmer should know

I do agree, I meant to put reasons for all of them, but before I finished getting to that point I had to go, so I just posted it. I should have just drafted it and added the reasoning later.

Author:  wtd [ Tue Aug 14, 2012 1:30 pm ]
Post subject:  RE:Languages a programmer should know

C should be on your list, if only for historical perspective. Of course, I don't think it should be a first language, but it should still be there.

Author:  mirhagk [ Tue Aug 14, 2012 2:01 pm ]
Post subject:  RE:Languages a programmer should know

Yeah actually that's true wtd. It's not something that you should really be using, but it's good to see why most people prefer OOP or functional programming.

Author:  wtd [ Wed Aug 15, 2012 11:52 pm ]
Post subject:  RE:Languages a programmer should know

I also firmly believe a very strongly-typed language (and preferably with type inferencing and pattern-matching) should be included.

Haskell and O'Caml are both strong candidates.

Author:  mirhagk [ Thu Aug 16, 2012 6:41 am ]
Post subject:  RE:Languages a programmer should know

Haskell's alreday in there, and actually so is C. I need to rewrite this to include reasoning behind all of the languages, which I'm in the process of doing. Afterwards would a mod be able to update this?

Author:  btiffin [ Mon Aug 27, 2012 3:12 am ]
Post subject:  Re: RE:Languages a programmer should know

mirhagk @ Tue Aug 14, 2012 2:01 pm wrote:
Yeah actually that's true wtd. It's not something that you should really be using, but it's good to see why most people prefer OOP or functional programming.


Given that I take the above statement as a reference to C. I protest. Wink

Umm, NOT REALLY BE USING???

Know C, it is the root source of almost all internet generation programming tools. Almost ALL.

Know C, at least to be able to read it. Do, there is no try.

Author:  mirhagk [ Mon Aug 27, 2012 7:25 am ]
Post subject:  RE:Languages a programmer should know

Your first point it being the root of all most modern programming languages is correct, which is why I agree you should learn it a little. But you really shouldn't be using C in any actual applications, if you're going that low level, might as well go all the way to assembly, otherwise stay with languages that encourage developer productivity. If your system absolutely needs every clock cycle, and you need C level control over it, you might as well take assembly level control and get that much more control over it. There are AMAZING tricks that can be done with assembly, it's just that the performance increase usually doesn't even matter.

Author:  Insectoid [ Mon Aug 27, 2012 8:02 am ]
Post subject:  RE:Languages a programmer should know

But there's a lot of great stuff available for C! You can still write games in it pretty easily, especially coming from Turing. Maintaining cross-platform compatibility is straightforward as long as you use cross-platform libraries. Of course, these libraries won't be as optimized as the equivalent platform-dependant libraries so you'll take a speed hit.

Linux is still written in C too, isn't it? Or did they just switch to C++? I don't remember if I read that somewhere or not.

Author:  mirhagk [ Mon Aug 27, 2012 8:51 am ]
Post subject:  RE:Languages a programmer should know

Yeah you can also write games in assembly if you really want. (roller coaster tycoon 1 was written in 98% assembly). Doesn't mean you should lol.

Author:  DemonWasp [ Mon Aug 27, 2012 11:46 am ]
Post subject:  RE:Languages a programmer should know

Linux is written in a whole lot of things. The kernel is entirely C (no C++ allowed). The stuff that sits on top of the kernel (including all the programs you run, the desktop environment, etc) are written in whatever. Most of them are C++, Python, Perl, Tck, C#, Java, etc; C++ and Python are probably the two most common ones.

Author:  mirhagk [ Mon Aug 27, 2012 12:03 pm ]
Post subject:  RE:Languages a programmer should know

It makes sense that the linux kernel is in C. There's no sense trying to upgrade something to a new language and break compatibility as well alienate programmers who are masters in C.

Author:  btiffin [ Thu Aug 30, 2012 9:42 am ]
Post subject:  Re: Languages a programmer should know

Quote:
But you really shouldn't be using C in any actual applications, if you're going that low level, might as well go all the way to assembly, otherwise stay with languages that encourage developer productivity.


old guy rant
Umm.

As a GNU/Linux developer I'll reiterate that C is the thing. THE thing. If you can wield C you are rarely going to get lost in the age of internet computing.

As a caveat; as a superset of C, learning C++ means C code won't look overly foreign.

C will be around for a very long time and is well worth the time spent, if only to be in a position to explore the vast world of open source projects.

I completely disagree with the statement "shouldn't be using C in any actual application".

One more caveat. The software development field is vast, wide and moving. You could very well make a life long career programming in Prolog and never set foot in C land. Maybe a career moving a virtual turtle pen around in Logo, but knowing C and being able to develop with the C application binary interface can't hurt.

Cheers

Author:  mirhagk [ Thu Aug 30, 2012 11:46 am ]
Post subject:  RE:Languages a programmer should know

Exactly, since C++ is a superset of C, you should use C++ in any application that you might use C, unless it's legacy code, or a legacy platform. OOP provides a way to make much cleaner and more manageable code, and you can always write a function as C code if you want speed in a couple critical sections of your application.

Author:  DemonWasp [ Thu Aug 30, 2012 12:48 pm ]
Post subject:  RE:Languages a programmer should know

There are a lot of valid reasons to avoid using C++ when you really just want to use C. Linus Torvalds covers a lot of them in detail in his rants, so I'll just go over the ones I remember briefly:
- no operator overloading (what does foo += 5 mean? is it the same as foo = foo + 5? In C you can always answer that, in C++ you have to know implementation details)
- no inheritance (and with it, no multiple inheritance, no 'hiding', less complexity in general)
- no templates (helps a LOT with compilation times, compiler error messages)

Basically, all the reasons boil down to: no magic. Say what you mean, mean what you say: code does what it says.

Remember that C isn't any faster than C++ in general. There are some specific cases where C++ code compiles into a faster executable (there was a pretty famous one about an object-oriented sort being faster than invoking a function pointer).

The results seem to be pretty good: the Linux kernel is the one piece of software I can't recall ever crashing on me (personal experience; I'm sure people have seen a few kernel panics).

Author:  btiffin [ Thu Aug 30, 2012 4:00 pm ]
Post subject:  RE:Languages a programmer should know

Ditto demonWasp.

mirhagk; It's mostly meaningless (scientifically) but interesting none the less, so you might like to check out

http://hammerprinciple.com/therighttool

That site will let you compare languages from a variety of (personal opinion) angles. COBOL, one of my favourites, and the one I spend most of my volunteer time on nowadays, scores very poorly on personal opinion but still manages to run the world's banks. Go figure.

Cheers

Author:  mirhagk [ Thu Aug 30, 2012 4:16 pm ]
Post subject:  RE:Languages a programmer should know

Basically the reasons to use C over C++ is that C has less features? May be a valid reason still, but it also means you have no ability to take advantage of those features. And I think most of those problems could be solved by having a consitent design principle, and clear documentation, something that can done very well, and easily with an IDE that supports something like VS's XML documentation. Don't know what something is going to do, just look at the popup

Author:  2goto1 [ Fri Aug 31, 2012 2:26 pm ]
Post subject:  RE:Languages a programmer should know

A list of languages will differ depending on the framing of the question, i.e. job marketability, programmer productivity, etc.

Author:  wtd [ Tue Sep 04, 2012 1:53 am ]
Post subject:  RE:Languages a programmer should know

C has the advantage that because there are relatively few features to the language there is A) less of a learning curve to the language itself, and B) fewer debates about the best approach to any given problem.

Now, this can be a disadvantage when one loses out on a great solution to a problem because it just isn't possible.

However, C's advantages can outweigh the disadvantages when one considers that 90% of ay large software project is not coding, but rather communication between the people working on it.

And as a final thought on the subject, the debate is somewhat silly since it does not happen in a vacuum. There certainly are languages which balance the power/simplicity formula better than either C or C++.

Author:  mirhagk [ Tue Sep 04, 2012 9:54 am ]
Post subject:  RE:Languages a programmer should know

C has less of a learning curve than other languages? I hope you mean only in the context as a 2nd language and not in the context of learning programming, because C would be a terrible choice for learning programming, something like python, pascal, C#, Java, Small Basic or nearly anything else would be a better first language.

I would argue that 90% of any large software project is not the communication between people working on it, but rather the breakdown would look more like this:

15% - Communication of specs and point of project
5% - Creating core framework
15% - Adding functionality to existing project
15% - Testing project
25% - Debugging project
25% - Trying to understand the code that someone else wrote who no longer works there

Understanding the code is probably the most important thing, and other languages that are clearly defined and have specific features for each purpose, even if each feature must be google searched is a lot easier to learn than the convoluted way that people write C code. OOP was invented because it produces cleaner code, sure there's more features to google, but that means there's clear documentation on the features rather than custom rolled code that would fulfill the same purpose.

One VERY important rule to remember in programming is that it's easier to learn a new library or framework than it is to learn what someone is doing with some code. The less code, and the more libraries you can use, the better it will be for others trying to understand it , because libraries (at least good ones) are clearly documented, have entire forums devoted to them, and have lots of support, while custom rolled code is left on it's own.

Author:  wtd [ Wed Sep 05, 2012 12:46 am ]
Post subject:  RE:Languages a programmer should know

I have frequently gone on record as saying that I prefer other languages as a beginner language. Interestingly the only language I've come close to recommending in that role that happens to be on your list is Python, and even that loses out to other similar languages.

OOP is one way to potentially create clearer code, especially in the context of patching over basic flaws in existing contemporaneous imperative languages. Unfortunately, a poor/incomplete understanding, which is sadly quite common, frequently ultimately leads to code which is less clear about its purpose.

A great deal of study in both object-oriented programming and alternatives is required to fully appreciate this.

Author:  mirhagk [ Wed Sep 05, 2012 10:24 am ]
Post subject:  RE:Languages a programmer should know

I agree that good code design requires good understanding, and I don't think people should cater to programmers with poor understanding. I think clean OOP concepts should be employed in code. People who can't understand code design and proper commenting shouldn't be making changes to any real code IMO.

The benefit to using a clear code design paradigm, and proper OOP concepts, as well as standardized commenting is that you don't even need to review code to figure out if someone actually understands what they are doing. If they can't figure out OOP design then I don't want them coding anything for me. In an open source project I think if someone makes changes that don't conform to the OOP design philosophy used, then someone else should rewrite their code, so that it matches the design, and so that someone experienced has actually taken the time to understand it so that any code that seems innocent at a glance, but that it actually evil and terrible will be more likely to be caught.

There are 2 types of programmers, copy and paste programmers who memorize and repeat, and programmers who actually understand concepts. I believe that we should only ever allow the 2nd group to have any sort of say in programming a system.

Author:  wtd [ Thu Sep 06, 2012 12:37 am ]
Post subject:  RE:Languages a programmer should know

I have to wonder, since you keep talking up OOPP if you have any experience with functional programming.

Author:  btiffin [ Thu Sep 06, 2012 11:13 pm ]
Post subject:  Re: Languages a programmer should know

mirhagk, on libraries;

I have to fall back to where I immerse myself, which is GNU/Linux. A vast array of libraries to play with. Most based on the C ABI (application binary interface). C++ link libraries are a pain without a C++ compiler. C makes linking far simpler, and the C ABI works with just about any language that supports dynamic linkage. It's where I live, and I expect that will remain the same for the rest of my programming days (at 50, that expectation is less than two decades, but still).

Wrapping C++ with extern "C" { } isn't very hard, but it's still an extra step in the build chain. I avoid it when possible.

My proof of concept GUI experiments for OpenCOBOL are GTK based, not Qt, mainly for ease of direct linkage.

Just sayin'.

Cheers

Author:  [Gandalf] [ Fri Sep 07, 2012 2:49 am ]
Post subject:  RE:Languages a programmer should know

btiffin, I don't understand your point. Why is "without a C++ compiler" even a factor here? From an application developer perspective, what makes dynamically linking C++ libraries so much harder than C?

Author:  mirhagk [ Fri Sep 07, 2012 11:56 am ]
Post subject:  RE:Languages a programmer should know

@wtd actually yes I have lots of experience with functional languages, and indeed I use functional programming nearly every day. Functional programming is extremely easy to convert algorithms and processes to because functional programming just makes sense mathematically. However for large scale projects I still prefer frameworks and overall language structure to be OOP structured. Core algorithms and libraries that my larger projects use are all structured functionally, while the project itself is OOP. It would be ignorant, and stupid to think that a single paradigm would solve all situations the best, and this mix works well for me, basically just choosing functional or OOP depending on each application.

EDIT: Also I'm curious what you do recommend as a beginner language, because that is an important question my old high school is going through right now. It's currently turing grade 10, with C# in 11 and 12. The teacher would like to replace Turing with another language, but it can't be C# because grade 11 doesn't have a pre req of grade 10, so it'd be weird to have students that are new to programming with students who have a year of experience with that language. I suggested looking into python a bit, but I'm personally not a fan of the whitespace matters part of python. The other language I suggested was small basic, because it was similar to turing in a lot of aspects, but teaches visual basic which is a completely viable programming language, and isn't horrendously slow.

Author:  btiffin [ Fri Sep 07, 2012 3:56 pm ]
Post subject:  Re: Languages a programmer should know

Gandalf;

somefunc.cpp
code:

int
some_func()
{
    // does nothing
}

$ g++ -shared -o useless.so some_func.cpp



So, now a gfortran developer wants to dynamically link to some_func. What's the CALL?

From a C ABI linker it's _Z9some_funcv that's pretty hard to describe without looking.

So now she needs to

code:

extern "C" {
    int
    my_version_of_some_func_that_I_can_link_to()
    {
        return some_func()
    }
}

g++ -c wrapper_file.cpp  -luseless

gfortran -o mycode mycode.f wrapper_file.o



And for me that's the pain. Encoding the function signatures in the link names (not a bad thing mind you if you are using C++ ) makes linking to C++ shared libraries just that little bit harder than straight up C.

** please note I didn't actually try the above and probably missed some -Wl,soname flag or -fpic or somesuch on the compile lines, and the useless.so would likely be recreated as fuseless.so instead of a simple object file. etc etc cma **

Cheers

Author:  bl0ckeduser [ Fri Sep 07, 2012 6:44 pm ]
Post subject:  Re: RE:Languages a programmer should know

wtd @ Wed Sep 05, 2012 12:46 am wrote:
I have frequently gone on record as saying that I prefer other languages as a beginner language. Interestingly the only language I've come close to recommending in that role that happens to be on your list is Python, and even that loses out to other similar languages.

OOP is one way to potentially create clearer code, especially in the context of patching over basic flaws in existing contemporaneous imperative languages. Unfortunately, a poor/incomplete understanding, which is sadly quite common, frequently ultimately leads to code which is less clear about its purpose.

A great deal of study in both object-oriented programming and alternatives is required to fully appreciate this.

wtd @ Thu Sep 06, 2012 12:37 am wrote:
I have to wonder, since you keep talking up OOPP if you have any experience with functional programming.


Agreed. I'm just a hobbyist programmer, but I think it's a fallacy to say that OOP is the only path to good programming.
An elegant, well-organized program can just as well be written in procedural or functional style (don't SICP and K&R show this ?)
In any case, I think what really matters is careful planning and forethought, as well as knowledge of good style and best practices.

Author:  mirhagk [ Fri Sep 07, 2012 7:11 pm ]
Post subject:  RE:Languages a programmer should know

Well I don't think the same program looks equally good in every paradigm, but I think each paradigm has it's own strengths and weaknesses. I use functional and OOP programming for completely seperate tasks, and doing a problem suited for one paradigm in another usually is awkward and slow and prone to bugs.

It's the same thing with nearly anything in life. Capitalism and communism produce very different results, it's arguable which is better in each scenario, but it's pretty obvious (just through statistics) that it's highly unlikely one of them would apply best to ever scenario.

Author:  [Gandalf] [ Fri Sep 07, 2012 9:54 pm ]
Post subject:  RE:Languages a programmer should know

btiffin, I see. But, even in the horrifying world where you have to regularly deal with name mangling and the like I would argue it's often worth the trade. Adding a few wrappers is a small price to pay if the underlying codebase benefits from using C++.

Author:  btiffin [ Sat Sep 08, 2012 10:51 pm ]
Post subject:  Re: Languages a programmer should know

Gandalf, I'll ditto your advice to all those reading along.

Don't fear the wrapper. Easy on the brain glue. But, as stated, watch that the joy of the linked code outweighs the grief of the extra source files.

And Gandalf, OpenCOBOL speaks Falcon. It was fun. Wink

http://www.opencobol.org/modules/newbb/viewtopic.php?topic_id=1221&forum=1&post_id=6113

You might note that I actually prefer to run nm over the .so files, snag a mangled name and try things before writing the wrapper source files.

Adding for those reading along. Don't fear one off experiments with non-portable fragile things like mangled names, but finish off properly; write the wrappers and document the tectonic changes. Then enjoy the ever growing number of highly efficient C++ shared libraries, from just about any language that supports a dynamic link loader.

Cheers

Author:  btiffin [ Sat Sep 08, 2012 11:27 pm ]
Post subject:  Re: Languages a programmer should know

Old guy rant rave;

Just to add to the general thread. From my 30 some years in, if you are good at software development, most managers will allow you to bring your toolbox to work. By toolbox, I mean favourite language, libraries, frameworks, etcetera for "non-core" tasks like data extracts and transforms, paperwork management et al. Don't expect to rewrite the main ui of the company app in Ruby shoes, but it can't hurt to ask the boss if she minds if the next side project is written with IPython (or Vala or...). The yeses may come more often than you'd expect. Then back up your talk with functional source codes and you'll get to bring in more of your coding comfort items.

From years in, it happens all the time. Sometimes with epic fail and a scapegoat**, but usually with willing coworkers and successful things.

Cheers

** [Edits - added anecdote, cause I can cause I'm old and raving]

Yeah, I can speak to that fail thing. I love REBOL, love. I chair the international user group. So, at work I pressed it into service for a small network scrape and data dispersion task. Loaded the main PostgreSQL database from supplier information. REBOL Postgres linkage worked the charm, first try, and off we went. I ensured the team that I had a FreeBSD build that would be suitable for the production boxes. Yeah, wrong. 64bit up'ed version needed 32bit compatibility layer and suckishly bad show stopping sym links from libc.so.5 to libc.so.6. So after two weeks of setting up the various feeds and happy joy joy, my enthusiasm for a technology cost the team two weeks (and four days of retrofit with a port to the more main stream Python scripts we fling). Luckily I smile with coworkers and the scapegoating was all, err mostly, in jest and not a boot to the curb. I'd do it all again in a heart beat (knowing one more thing to check off a list before talking the talk).

Author:  mirhagk [ Sun Sep 09, 2012 2:06 pm ]
Post subject:  RE:Languages a programmer should know

Hmm that seems dangerous of a manager to allow ANY language or framework. I'm all for inter project freedom with languages and frameworks, but I'd try to make sure that every language and framework is well documented and commonly used (so that there are help forums, and others to ensure there won't be tons of show stopping bugs).

It might be fine for you to write your next project in Erlang, but if the next software developer to come along needs to learn an entirely new paradigm to understand your code just to fix that one little error you made (which is impossible to avoid) they may end up not bothering to fully learn it, and end up mucking up the program beyond repair.

Author:  2goto1 [ Sun Sep 09, 2012 9:45 pm ]
Post subject:  RE:Languages a programmer should know

I agree less with btiffin and more with mirhagk on that tangent. There is some wiggle room to allow toolkit choice within a development team. I have two rules of thumb that I like my teams to follow:

1. If you get run over by a bus ensure that your deliverables are easy for the rest of your team to understand and to productively continue versus re-writing from scratch

2. If there is even the remotest possibility of re-use (ETL scripts included), the team should deliver using team standardized tools, languages, and coding practices. The deliverable once archived and documented has a higher possibility of re-use.

This can pigeonhole one into using their own personally favoured languages for just the most trivial of tasks, but it is in the best interests of your team. Client, company, team, me in that order when you're not the one paying your own salary.

Author:  mirhagk [ Mon Sep 10, 2012 6:44 am ]
Post subject:  RE:Languages a programmer should know

Yeah the freedom I see that programmmers have is more along the lines of "I don't like this GUI framework, there's this more documented alternative that I'm going to use" and less of "I don't like C#, I'm going to use Prolog".

Author:  btiffin [ Wed Sep 12, 2012 12:16 am ]
Post subject:  Re: Languages a programmer should know

Old guy, shields up. Wink Wink

Ok, on getting new technologies into work. Try this. Do. Talk to co-workers and endorse your choice. Cheer lead and try and convince. If you are good at software development, key phrase that, I'd wager that not all your ideas and preferences will be ignored. It's one of the ways technically good systems get into corporations.

It is a responsibility? of good developers to speak their mind and if possible counter the marketing hype that managers are surrounded by and pounded on with. Drive the field into better software, not always the systems that get the most advertising dollars and most face time with company decisions makers.

Caveats and rambling
I'm a HUGE fan of Rear Admiral Grace Hopper. She has an attributed quote "It's easier to ask forgiveness than it is to get permission.", which started out as "If it's a good idea, go ahead and do it. It is much easier to apologize than it is to get permission."

Yeah, although I'm a fan ... that is not how to progress as your average developer. Don't EVER sneak things into work, ask and get clearance to show people, then try and lead on.

At home, forking some open source, go right ahead, do, it's part of the ecosystem. At work, where you have traded your time for someone else's money and probably using their stuff, ask first, plead forgiveness those rare times you screw up.

Cheers

Author:  mirhagk [ Wed Sep 12, 2012 8:08 am ]
Post subject:  RE:Languages a programmer should know

Yeah by all means ask, but if you're the only one who knows a language or framework, you gotta make sure someone else understands it before you can use it, and you gotta make sure there is lots of support available online.


: