Jump to content

What Language Should i Learn First.?


Violetx

Recommended Posts

What's your background?

It's like learning a spoken language - it'll probably be easier when it's like something you're already familiar with and you have a better chance of retaining the knowledge when you need to repeat using it on a near-day to day basis.

So tell us a bit about yourself. What OS do you like to use? Have you used programming languages before and if so, which? Did you like them? What's the sort of thing you'd like to create? Do you want to keep track of the MP3's you acquired completely LEGALLY of course, or have your own little IMDB for the movies you possess? Something you access via a browser or via a dedicated client program? An app maybe? Have something keep track of the music you've asked your music player to play, kinda like Last.FM did back in the day?

Name something that you're interested in that you think software could make easier, even by just a little. I started over 30 years ago (pre-GUI age - it was all text) with a menu program written in MS Basic that would, at the flick of a button, allow the rest of my family to start a game or WordPerfect (remember them?? Shit, I'm old). I later created a whole stack of programs that would allow me to keep track of my beer label collection (my parents wanted me to get a hobby that would keep me away from the computer. It backfired).

The thing to remember about programming languages is that you shouldn't *need* to use applications to work with programming languages. My motto is that if you can't program with Notepad/Vim/Emacs, you're a poor programmer. The IDE applications are there to help you, but you should at all times be aware of what they're doing and if need be undo the damage they inflict upon your project. Look at any properly maintained source repository (github or sourceforce... mostly github) and you'll find exclusively source code files there. Those IDE-specific files have no business there because, like the IDE itself, they're *irrelevant*. IDEs die and get replaced over time. The language lives on. Learn the language, not the IDE.

Link to comment
Share on other sites

Find a tutorial series on YouTube and learn to code something. My first language was BASIC. I would probably recommend learning Python as a first language after having learned a few languages I think python is about the simplest syntax.

Language is less relevant once you know programming terminology and logic. For instance constructs like loops in C, C++, java, are virtually identical. So once you know a language learning another one is a lot easier. This will come in handy when you want to mod a software but the source is in a language you have not worked with.

Some languages are easier for things like networking, databases, or graphics. Some languages are great in some areas and poor in others. Some languages have built in features, other require external libraries and such which might be confusing to install and might have you rage quitting every other day because you just can't figure out to make things work.

Find a language with documentation and tutorials that you are able to understand.

Keep in mind there may be many versions of a language and things change over time. The syntax for C99 is not the same as C11. So when you look up tutorials make sure you know what version of the language you are looking up and understand those versions will be different. There are ton of books on Visual BASIC 6 that will tell you everything you can do with Visual BASIC 6 but if you trying to learn a current version of VB those books are just going to confuse and frustrate you. That being said, there are some real gems in some of the older programming books.

Edited by vailixi
Link to comment
Share on other sites

  • 3 weeks later...

I prefer higher level languages these days as opposed to the older stuff. For me these include C#, Java, etc.

Background

I first got coding in Java, most of the tools/IDE's related to java are free and open source. When I was in high school I think we used Jbuilder or something(can't remember the name), I found later that Eclipse was probably a better, if not more complex alternative. Even more recently there was the Netbeans IDE, but I think I still prefer eclipse due to the fact that you can use it with other languages such as python/C++ with the right plugins. In college I made a mean batch processing/transaction program in C. It was insainely efficient, due to returning pointers to structs from some reader functions I wrote, as well as static local variables for storing the file pointers I was using. The program only contained two objects at any given time, which made it memory efficient, and since it was essentially parsing CSV files only two objects were ever required. CSV file processing usually locks you into processing a record at a time, unless you take the time to write to a collection, which probably would have slowed the program down in my case. I have kind of jumped around while learning languages, but I think that has been benificial in many ways. I absolutely hated my first language Java, but now I understand that it's syntax is a whole lot better than some languages, and I am back to liking it again. I am especially happy with it now since it supports lamabadas. C# also supports lamabdas (safe callback functions). This allows for better pipeline systems (essentially querying operations on in language data). Later I was introduced to web development tools such as JavaScript (not java, this one is a Microsoft thing), CSS, HTML (markup lang, not actually a programming language per-say), etc. Honestly these web languages have so many dialects I am still a novice with them, but they will probably be more essential as time goes on. I was introduced to ASP.NET, but the book I read emphasized more of the drag and drop Visual Studio features, and less on the actual code syntax, I consider this a failure of the literature. There are probably at least a few languages I have completely foregot to write down here, especially the ones that I learned on my own. I am a little tired tonight.

Point being...

You should start with a more recent language like C# or Java etc, not so much the old, nearly dead languages like Basic, Assembly, Cobol, etc. I have seen some cobol programmers around, but it isn't one to persue. All the programmers in those languages are old dinosaurs. I heard some company managers put it this way, "We don't want any more Cobol programmers." The reason being, the applications need upgraded, or replaced with modern, maintainable code. They don't need more old code generated. One point about ASM, it is probably good to learn for reverse engineering, hacking/shellcode, etc. One isn't going to go out and deliberately code a project with it though unless it is an operating system. The new languages, even though they loose a little bit of power, can get a lot more done with less code due to the fact that you are coding things whith high level abstractions. That's the real power behind the new languages. Avoid the old stuff, try to choose something which is cutting edge, and will proably be supported for a while (Microsoft is usually a safe bet C#). You don't want to learn Basic. You will also proabably learn dozens of languages as you progress along your career if you choose to develop one. It is not a bad thing, each language is a tool for specific jobs.

Syntax

C#, and Java are very clear to me syntactically, and they have enough syntactic sugar to keep you interested. They are object oriented, which means that you use objects, which are basically a fusion between functions, and data, composed into a self contained unit, class member variables, and "methods". Methods operate on the data members. C, the old way was Procedural/Functional. Everything was coded inside a function. Functions called functions called functions... Data was declared inside functions, and passed as parameters to functions. Though you may find functions more direct, object oriented pays huge dividends when implemented right. C/C++ also have a reputation for being more convoluted. Even Python, an object oriented language has some pitfalls. Whitespace in python is essentially their way of using braces in other languages. The whitespace changes the flow of the program. The syntax is also a little harder to understand in some cases. C# can be used to make server backends, which basically act as a go-between between the database and the outside world on a website, and it can also be used as a standalone desktop application. Java can be used for desktop applications, it is portable, and I believe it can also be used for backend/web related work. PHP is a good website backend, but I find it to be convoluted in some instances as well. This doesn't stop lots of people from using it however. C/C++ are used much of the time for desktop/operating system related programs. Everything the user sees from the website is implemented in javascript, CSS, and HTML, the user interface, which talks to the server backend, the C# etc, which in turn talks to the database. Web applications are therefore an ecosystem of sorts. I find Visual Basic to have way too many ugly code blemishes, for instance instead of declaring variables you dim them (int i = 0; versus dim i = 0). In VB everything has an end statement instead of a much more succinct curly brace. I guess I sometimes add comments to the end of some of my structures anyway, but I prefer to have a choice in the matter.

Edited by overwraith
Link to comment
Share on other sites

Regarding your opinion on 'old' languages and such, true, COBOL and its ilk are seen as a bane on current innovation. But they're actually nothing near as unmaintainable as people might think. The problem here is that COBOL being an old language isn't seen as sufficiently sexy so kids aren't being taught how to program in them. Because of this, the inflow of new talent has dwindled. The unmaintainability stems from the inability of managers to find qualified personnel to grok the code. It's like claiming an old car as being a piece of shit because no mechanic knows how to keep the thing running.

I work in healthcare and we have one product that's run off of a base of COBOL code. Its fringes have been encroached by more modern languages, but at its core it's still COBOL. And the reason for that is that if you spend the (ballpark estimate) 1 million euros to rewrite that code you get nice, sexy and still maintainable code that will require roughly 9 times the same amount of hardware to come anywhere near the original performance. This is like comparing ASM with Java - you'll be shocked, stunned, baffled and slightly nauseated from the things you're allowed to do within that language, but if you do it properly you get a fully functional chunk of code that is so ridiculously fast and efficient all you can do is look upon it in sheer awe.

But even if the performance was on par with the COBOL code, if the company invested that money they'd still have nothing more than that chunk of code. Their net benefit is 0 but their expense was considerable. Being able to say "Yes, but now it's written in Java" doesn't impress a manager that has a budget to maintain. As time goes on and the COBOL programmers become more and more expensive it might start to make more and more sense to make that investment, but as things stand right now... not really.

We actually recently hired a new COBOL programmer. A fairly young one, at 48. Yes, not a joke, for a COBOL programmer these days, that's a youngster. Most of these people truly are old dinosaurs. But that doesn't mean they're incapable and in fact more often than not means they're MORE capable. I wouldn't be at all surprised if that guy makes quite a bit more than me, and I'm doing pretty damned good for myself.

So it might not be sexy, but if you want to go into programming as a career, consider learning COBOL. It's likely to end up being quite lucrative for you.

Edited by cooper
Link to comment
Share on other sites

  • 3 weeks later...

With all due respect cooper, I am not interested in career suicide. I have been told by programmers much older than me that deleberately looking for long term jobs in older languages like C/C++, ASM, and Cobol are career enders, especially for a young guy. Sure there might be some leverage for some people to negotiate pay, but there are reasons that newer languages shun the low level stuff in favor of higher abstraction. Sanity is one of them. I do occassionally enjoy jaunts into high speed old stuff, but they are just jaunts. The nature of moving forward is that we move away from the micro level into higher abstracted operations. Sure, businesses like to live in the past, and not move forward, mistake or not. I should probably ammend what I have said previously however, re-writing everything is a waste of time. There is way too much out there to re-write. Instead try to live with what has been coded previously as you move forward with new applications (until management notices that the old system is a problem). We should move forward, not backward.

Link to comment
Share on other sites

I sincerely believe that if you're a programmer, you're intimately familiar with the common constructs used in code, have the ability to grok the actual problem at hand and at that point all that remains is putting the solution you've come up with into a language. What that language is depends on the environment and the problem area but is mostly the least interesting part of it all. Coming to grips with a previously unknown programming language might take you a week or two, but if you know how to actually design and implement code the amount of time spent here is insignificant.

To make the obligatory car analogy, a mechanic working at a Ford dealership doesn't just know how the engine in a Focus works. He knows how an engine works, so when he gets asked to work on a Focus from a different year or even a different Ford, he might need to take a quick peek at a book that highlights the differences, but it's mostly the same. And when he decides Fords are crap and he jumps to the Buick dealership, he doesn't have to relearn everything from scratch because he still knows how an engine works and an engine in a Ford runs mostly the same as the engine in a Buick. So he grabs the book, reads up on the peculiarities of Buick engines and before you know it the guy's up to speed.

Limiting yourself to 1 thing in my opinion tends to be a self-inflicted harm, and you'd do well to avoid it. Keeping COBOL out of your vocabulary doesn't harm you, but adding it could do you lots of good. If anything because you'll be able to grok the code that's already there which you need to replace with $SEXY_LANGUAGE.

Link to comment
Share on other sites

You've got a point about not limiting one's self, but take into account that languages do take time to master. There are so many languages popping up these days that perhaps learning too many of the older ones could quickly eat up all your time to learn other newer things. Sure there are things that trancend the languages, but I have found that the API's are vastly different, the syntax is usually different, etc. Perhaps only pick a few older languages to master if you have to. One may be able to code something in C, but if it takes twice as long to code as something in C#, due to pointers (I know pointers good, but they can be a bit of a pain to learn the first time), checking your input buffers manually, etc, your time would perhaps be better spent in a higher level api. Perhaps input buffers are less of an extreme example, because C coders always know to do that (I would hope). Perhaps a better example is the win32 networking api versus what has been implemented in higher level languages the socket wrapper of the win 32 networking api. The amount of languages that one has to know for modern development is a bit daunting these days.

I should note that some older languages are in fact perfectly suited for certain niches, for example, C/C++ is perfect for embedded electronics/hacking.

The real benifit of higher level languages is that you might be able to instantiate a single line of code in your program, and that object perhaps represents hundreds of lines of code and decisions etc. This can cut down on development time.

It is my perception that cobol is on the way out (right or wrong), and I have no need to learn an aging language that doesn't even support object oriented.

Edited by overwraith
Link to comment
Share on other sites

I teach computer programming at a college level and I start my students off with Python. I recommend against learning Java as a first language because of a couple reasons. Essentially it will just confuse you and turn you off to programming. Here is what I mean

// WTF is a package??
package learning.programming;

// WTF is a class what why public??
public class FirstProgram {

    // what is a void? Why is it public? what does it mean by static? Wtf is a String[]?
    public static void main(String[] args) {
        // All of this code for it to just say hello world??
        System.out.println("Hello world");
    }

}

There was this amazing article called "The pitfalls of java as a first language" but I can't seem to find it for you.

Anyways learn Python first just to get your beak wet.

Also shameless time for me to plug a Python module I am working on called jBot which is a "robot simulator" for the purpose of learning to program with instant visual gratification. I have noticed that a lot of my students weren't retaining the concepts that I was teaching them so I figured maybe if they see these code be executed by something visual then they will understand it better. Turns out that that is completely true. So If you want to learn python and you are more of a visual learner then jBot if definitely something you should check out: https://github.com/frozenjava/RobotSimulator

Link to comment
Share on other sites

Going from C/C++/C# to Java is a nightmare, it's laid out so fucked.

College at 30 years old, after taking AP comp sci in HS C++, then military come out, no credit for AP. 101 is now a Java course including me a Microsoft worker, and a huge nix admin. We constantly butted heads with the professor about optimizing code and using easier formats for long winded shit she taught, oh and every damn thing had to be commented, which ended up being more comments than code. Made my high school AP Comp Sci look like MIT level vs this shit. Java is ok at best but so shit otherwise.

Edited by deadlyhabit
Link to comment
Share on other sites

I later created a whole stack of programs that would allow me to keep track of my beer label collection (my parents wanted me to get a hobby that would keep me away from the computer. It backfired).

So your parents said something like, "Computers are a bad influence, you should do something with beer!" :wub::grin:

Link to comment
Share on other sites

My parents said "You spend too much time behind a screen. Go find a hobby." - the beer angle was my idea and when my parents mildly protested my argument was "hey, you wanted me to have a hobby, this is a hobby" :cool: .

As a result I have a big love of beer varieties and as a matter of fact spent all day yesterday at the Bockbeer festival in Utrecht. There were some 25-30 different beers on tap and I got close to tasting all of them, a feat I actually accomplished last year.

Edit: I should maybe point out that I'm currently mildly hung over, so if you want to try this yourself I would recommend you ensure you have the day after off, which is what I would've done if I didn't already have plans for saturday.

Edited by cooper
Link to comment
Share on other sites

We constantly butted heads with the professor about optimizing code and using easier formats for long winded shit she taught, oh and every damn thing had to be commented, which ended up being more comments than code. Made my high school AP Comp Sci look like MIT level vs this shit. Java is ok at best but so shit otherwise.

Now, bad teachers are one of the things I have had to contend with too. Once I had a format nazi teach one of our classes, always insisted on "citing" the code we used, so we essentially couldn't use snippets, or even translate them, and we had to use the teacher's convoluted fucked up sample code, everything in one file, etc etc etc. I am convinced I have probably picked up some bad habits from that class, and it pisses me off so bad. What's more we had to cite the teacher as the main contributor to our frigging programs. Why I wonder do we have to cite him for creating obscure half finished programs and telling us to finish them? And of course it wasn't enough that I had good commenting habits before the class, he insisted on comments where the granularity of them seriously contributed to the obfuscation of what the code was actually doing. The deplorable person also would essentially write programs with the intent to rim-rock us into corners which we had to code our way out of. This essentially caused us to spend way too much time trying to figure out exactly what he wanted (I am talking, like days even for experienced programmers). Quite frankly there are some practices for formatting code which aren't used much anymore, and create obscure code, but he insisted we use them anyway. There was a damn APA citation in each and every one of the programs we wrote. And of course every time you missed something really really small formatting wise you would loose points on the assignment, regaurdless of whether the program preformed flawlessly. I debated for a while creating a program which would remove these "code features" automatically for me, and clean up the mess, but unfortunately I would probably need some kind of java parser or something. At this point I have completely written off actually being able to use those programs as examples. I think this teacher in particular didn't like me much, and therefore sought ways to make the class harder than it actually needed to be. Oh, and have you had those teachers who mess up the requirements for the program, and use an "and" when they meant an "or" in their language, etc? Or the ones who say one thing, but meant something completely different? Whenever there was the possiblility of the teacher wanting something else, I would essentially have to code the program twice to ensure that I got at least one good answer, and I would put a comment in, essentilaly saying "hey you fucked up with the instructions" (say it nicer than this you don't want to get marked down) comment or uncomment the following line depending on what you actually wanted. The programs we wrote were also really really lame. I wrote it and would be like, oh, that was a waste of time, and will be useful to absolutely no-body!

I don't entirely agree that java is shit, I have seen some really awesome java code before. I think early on it's emphasis on pure OO was a bit much. I am very happy that now they have actually added callbacks to the language in java 8. Now you can do some really cool things with the streams api etc. You can create these data pipelines etc. They are essentially trying to compete with LINQ in C#, and possibly scala which is built on their runtime. Object oriented is a little bit more complex, but it is where most of the languages seemed to be going to over the years. objects can be very useful, due to the fact that you can essentially create your own "types" which have their own self contained functions/methods and therefore behavior. You can encapsulate, and you can practice least privilage stuff, etc with encapsulation. Java however is not my absolute favorite language, because I really enjoy some of the features some other lanugages offer. Java can do some really cool things though, and does have a very good Network API. One of the things that I don't like about java so much is that doing some things, especially Windows specific becomes more difficult, and this would be expected due to the cross platform nature of java. C# doesn't even allow you to inherit from thread, java does.

In summary "Those who can, do; those who can't, teach."

Edited by overwraith
Link to comment
Share on other sites

Going from C/C++/C# to Java is a nightmare, it's laid out so fucked.

College at 30 years old, after taking AP comp sci in HS C++, then military come out, no credit for AP. 101 is now a Java course including me a Microsoft worker, and a huge nix admin. We constantly butted heads with the professor about optimizing code and using easier formats for long winded shit she taught, oh and every damn thing had to be commented, which ended up being more comments than code. Made my high school AP Comp Sci look like MIT level vs this shit. Java is ok at best but so shit otherwise.

My transition from C to Java was pretty smooth, actually. Currently C# is tripping me up with the casing, the treatment of exceptions, the namespace being a block, the garbage collector being an idiot (create a thread and have the GC remove it before I can start it...) and properties automagically being assigned accessor methods so you can address them as actual properties rather than actually invoke the accessor methods which makes the code that uses it be explicitly aware of the object's structure without needing to. I also hate their Socket implementation which feels like it was one of the first things they designed, it's that ass-backwards. But the internal Windows socket api is made by someone who clearly has access to drugs that are *WAY* better than anything I can get.

And wrt comments, on average about 30% of my code is comments and it's something I do quite religiously. All of it at in a javadoc block before the method and only in very rare cases will there be comments within the method. Typically where I'm forced to do something funky or I added a condition that on the face of it should never trigger but does in which case I describe how this came into being. I'm also very much for using profanity in code comments because it's a great attention grabber to either something messed up an external system does that you're forced to deal with, or something stupid you added so you could make your deadline knowing full well it will never scale.

I once had a co-worker stand near my desk crying from laughter because he had done the code review on a program I had to write to do a bit of interfacing between our main program and an external party's steaming pile of unmanagable VB spaghetti. The name of the program itself was actually an abbreviation for "small fucked-up program". Because everything about this external party's software made you want to scratch your eyes out, pour sulfuric acid into the wound and scrub it out for half an hour with a steel brush, I wrote a little story in the code comments about the guy operating that external company (the guy was the CEO, CTO, CFO, enterprise architect and lead dev... you know the type) that involved him, a goat and a large jar of vaseline...

Edited by cooper
Link to comment
Share on other sites

Best thing I have read all day cooper, ty.

As you all can see though programmers all have their preferences. You can see a benign holy war brewing here. lol.

These holy wars are actually very typical in our field, and a few of my recruiter contacts have even commented on them.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...